Welcome! Everything is fine.

[2주차] Python 100 문제풀이 Part.2 - 함수 본문

자격증 및 기타 활동/여름방학 스터디(Python)

[2주차] Python 100 문제풀이 Part.2 - 함수

개발곰발 2021. 7. 15.
728x90

💡 함수

기본적인 함수 작성법

❔ 파이썬의 기본적인 함수 작성과 호출에 대한 코드를 구현하시오.

# 함수 작성
def a():
     print("붕어빵")
     
def b():
     print("개구리빵")

# 함수 호출
a()
b()

리턴값이 있는 함수를 작성하시오.

리턴값이 있든 없든 함수를 만들 수 있으며, 각 함수의 변수명은 같아도 상관없다.

def a():
	result = '붕어빵'
    return result

def b():
	result = '개구리빵'
    return result

 

변수의 메모리 주소값 출력하기

변수의 메모리 주소값을 출력하여 다른 함수내 같은 변수의 값들이 어떤 주소를 가지고 있는지 출력하시오.

변수의 메모리 주소 값을 출력할 때는 id( )함수를 이용한다.

def a():
	result = '붕어빵'
	result_loc = id(result)
	return result_loc

def b():
	result = '개구리빵'
	result_loc = id(result)
	return result_loc

print("a()함수 내 result 변수의 메모리 주소 :", a())
print("b()함수 내 result 변수의 메모리 주소 :", b())

max( ) 함수와 min( ) 함수

❔ 최고 점수를 출력하는 함수를 만들어 영어 점수표를 함수로 전달하면 최고 점수가 나오도록 구현해보시오.

max ( )  최댓값을 찾아 리턴하는 함수
min( ) 최솟값을 찾아 리턴하는 함수
english_score = [35, 55, 87, 98, 48, 88, 77, 65, 91, 79]

# 최고 점수를 출력하는 함수
def max_in_list(lst):
	return max(lst)

# 최저 점수를 출력하는 함수
def min_in_list(lst):
	return min(lst)
    
max = max_in_list(english_score)
min = min_in_list(english_score)
print(max, min)

전에 배운 sort( ) 함수로도 구현해볼 수 있다.

def max_in_list(lst):
	lst.sort(reverse=True)
    list_max = lst[0]
    return list_max
    
def min_in_list(lst):
	lst.sort()
	list_min = lst[0]
	return list_min

❔ 아래의 코드를 수정하여 최고, 최저 점수가 동시에 출력되도록 구현하시오.

def max_min_in_list(lst):
	return min(lst)
	return max(lst)
    
english_score = [35, 90, 58, 30, 98, 56, 89, 78, 91, 67]

result = max_min_in_list(english_score)
print(result)

위와 같은 코드를 실행하면 최솟값인 35만 출력된다. 함수내에서 반환되는 리턴 값은 하나여야 하기 때문이다. return 함수가 나오면 함수가 종료된다. 따라서 함수를 각각 만들거나, return을 하나로 만드는 등의 방법을 통하여 수정하여야 한다. 

# return을 한 줄에 쓰는 방법
def max_min_in_list(lst):
	return max(lst), min(lst)

a, b = max_min_in_list(english_score)

print("최고 점수 : ", a)
print("최저 점수 :", b)

나 역시  return을 하나로 만들기 위해 아래와 같이 따로 변수를 만들어서 그 변수를 출력하였다.

# 하나의 변수에 최댓값, 최솟값을 넣는 방법
english_score = [35, 55, 87, 98, 48, 88, 77, 65, 91, 79]

def max_min_in_list(lst):
    min_max = f"최저 점수는 {min(lst)}점이고, 최고 점수는 {max(lst)}점입니다. "
    return min_max
    
result = max_min_in_list(english_score)
print(result)

❔ 아래 코드는 리스트에서 최젓값을 찾아내는 함수를 직접 구현한 것이다. 올바른 출력 결과가 나오도록 빈칸을 채워보시오.

def min_in_list(lst):
	ar_num = ______(lst)
	first_min_number = ____________
	for i in range( ______________ ):
		if _________ < first_min_number:
			first_min_number = ____________
	return first_min_number

lst = [33, 44, 55, 66, 77, 88, 99, 11, 22, 100, 48, 82, 57, 79, 91, 38]

result = min_in_list(lst)
print('[3-1] : 직접 구현한 min() : ', result)
print('[3-2] : 내장 min() : ', min(lst))

len( ) 함수를 이용하여 요소의 개수를 구하고, 요소의 인덱스 값을 구할 수 있도록 빈칸을 채웠다. 

def min_in_list(lst):
    ar_num = len(lst)
    first_min_number = lst[0]
    for i in range(len(lst)):
        if lst[i] < first_min_number:
            first_min_number = lst[i]
    return first_min_number

lst = [33, 44, 55, 66, 77, 88, 99, 11, 22, 100, 48, 82, 57, 79, 91, 38]

result = min_in_list(lst)
print('[3-1] : 직접 구현한 min() : ', result)
print('[3-2] : 내장 min() : ', min(lst))

sort( )와 sorted( )의 차이점

 sort( ), sorted( ) 함수 둘 다 아무런 옵션 없이 사용하면 디폴트 정렬이 오름차순이다.  그러나 사용 방법과 원본에 대한 결과가 각자 다르다.

 

1. sort( ) : 원본을 유지하지 않는다.

english_score = [35, 55, 87, 98, 48, 88, 77, 65, 91, 79]

b = english_score.sort()

print(b) # 출력 결과 None
print(english_score) # 출력 결과 [98, 91, 88, 87, 79, 77, 65, 55, 48, 35]

 

2. sorted( ) : 원본을 유지한다.

english_score = [35, 55, 87, 98, 48, 88, 77, 65, 91, 79]

a = sorted(english_score, reverse=True)

print(a) # 출력 결과 [98, 91, 88, 87, 79, 77, 65, 55, 48, 35]

❔ 오름차순, 내림차순 정렬을 sort(), sorted() 함수로 구현하시오.

lst = [100, 50, 70, 88, 65]

# sort()
lst.sort()
print( '[1] sort() 오름차순 정렬 : ', lst)
lst.sort(reverse=True)  

# sorted()
sorted1 = sorted(lst)
sorted2 = sorted(lst, reverse=True)  

print( '[1] sort() 내림차순 정렬 : ', lst)
print( '[2] sorted() 함수로 정렬 : ', sorted1, sorted2)

입력 파라미터 값 지정하여 호출하기

❔ 함수 호출시 입력 파라미터 값을 지정하여 함수를 호출하는 예제를 만들어보시오.

def my_func(id_, name_, strength):
 	return id_, name_, strength

result = my_func('batman', '베트맨', '900')
print(result, type(result)) # type은  튜플로 리턴된다.

하나의 변수 vs 여러개 변수

하나의 변수로 리턴값을 받아서 출력하는 것과 여러개 변수로 리턴값을 받아서 출력하는 것은 그 결과와 타입이 다르게 나타난다.

❔ 아래 코드의 결과를 말해보고 타입은 무엇으로 나오는지 설명해보시오.

def my_func(id_, name_, power):
	return id_, name_, power
    
result = my_func(id_='superman', name_='슈퍼맨', power=3000)
a, b, c = my_func(id_='batman', name_='배트맨', power=4000)

 

result 라는 하나의 변수로 리턴값을 받아 출력한다면 아래와 같이 출력될 것이다. 여러개를 반환하지 않고 '튜플'이라는 하나의 값을 리턴한다.

('superman', '슈퍼맨', 3000) <class 'tuple'>

반면 a,b, c 라는 여러개의 변수로 리턴값을 받아 출력한다면 아래와 같이 출력될 것이다.  각 변수마다 따로 값이 들어가기 때문이다.

batman 베트맨 4000 <class 'str'> <class 'str'> <class 'int'>

디폴트 파라미터

❔ 디폴트 파라미터란 무엇인지 설명하고 부가세 계산 프로그램을 만들어보시오. 이때 공급가 구하는 부분을 디폴트 프라미터로 받아 구현하시오.

✔ 디폴트 파라미터란 함수를 호출할 때 인자의 값을 설정하지 않아도 기본값이 할당되도록 하는 것이다. 기본값은 함수를 정의할 때 지정한다.

def calc_tax(price, operator=1.1):
	supply_value = round(price/operator) # 공급가
	vat = price - supply_value # 부가세
    return supply_value, vat, price

result = calc_tax(110000)

print(result)

파라미터 갯수를 알 수 없을 때 함수를 만드는 방법

가변길이 입력 파라미터 : 함수에서 입력 파라미터를 받을 때 * 표시를 해줌으로써 가변길이라는 것을 명시적으로 표시한다.

가변길이 입력 파라미터 값을 함수가 받았을 때의 자료형은 튜플이다.

❔ 함수 호출시 파라미터 갯수를 알 수 없는 상황에서는 함수를 어떻게 만들어야하는지 예제로 설명하시오.

def my_func(*params):
    n = 0
    for i in params:
    	n += i
    return n

a = my_func(1,1,1,1)
print(a)

b = my_func(1,2,3,4,5,6,7,8,9)
print(b)

❔ 가변길이 입력 파라미터 값들을 함수로 넘겨서 해당 파라미터의 갯수와 홀수들의 합을 구하는 코드를 구현하시오.

def my_func(*params):
    count = 0
    hap = 0
    for i in params:
        count += 1
        if i % 2 != 0:
            hap += i
    return count, hap

a, b = my_func(1,2,3,4,5,6,7,8,9)
result = my_func(1,2,3,4,5,6,7,8,9,10,11)
print('가변길이 입력 파라미터 갯수와 홀수의 합 :', a, b, type(a), type(b))
print('변수 하나로 리턴되는 값 :',result, type(result)

그러나 더 쉬운 방법은 len( )함수를 사용하는 것이다.

def my_func(*params):
	print(len(params))

📌 다음주 계획

- <Python 100 문제풀이 Part.3 - OOP> 강의 듣기

- <Jump To Java> 05장 공부하기 + <이것이 자바다>

- Github 더 공부하기