▶ 문제1
- 하나의 함수는 숫자를 3개 입력받는다.
- 함수를 호출하면 안에 숫자들의 평균값 구하기.
def aver(num1, num2, num3): # 함수정의, 매개변수는 숫자 3개
aver = (num1 + num2 + num3) / 3 # 숫자 3개를 더해서 3으로 나누는 aver 변수 선언
print(aver) # aver 값 출력
input1 = int(input("num1 : ")) # 숫자 입력 받기
input2 = int(input("num2 : "))
input3 = int(input("num3 : "))
aver(input1, input2, input3) # 함수호출, 입력받은 3개 인자
개인과제에서 input 함수를 배웠기 때문에! 써봤다.
처음에는 int로 바꾸는 과정 없이 input 만 받았었는데
input1 = (input("num1 : "))
input2 = (input("num2 : "))
input3 = (input("num3 : "))
# TypeError: unsupported operand type(s) for /: 'str' and 'int'
입력을 받으면 전부 문자열이 되기 때문에, <문자열 str / 숫자 int> 가 지원되지 않는다는 에러가 발생했다. 그래서 입력받은걸 숫자로 바꿔서 저장해준다.
▶ 문제2
- 하나의 함수는 숫자를 무제한 입력받는다.
- 함수를 호출하면 안에 숫자들의 평균값 구하기.
함수정의에서 매개변수를 받아야되는데 몇개 받을 지 모르는 상황이다.
이 때 매개변수에 * (asterisk, 애스터리스크)를 붙여주면 인자를 가변적으로 받을 수 있다.
보통 arguments(인자)의 약자를 써서 args 라고 한다.
*args : 가변 인자를 함수의 매개 변수로 받기
def aver(*args): # 함수 정의, 가변 인자 받기
aver_result = sum(args) / len(args) # 평균값 = 요소합 / 길이
return aver_result # aver 함수 결과값 반환
근데 인자를 튜플형태로 받아오기 때문에, 이대로 예시 리스트를 집어넣으면
ex_list = [1,5,3,2,6] # 예시리스트
print(aver(ex_list)) # 함수호출
# TypeError: unsupported operand type(s) for +: 'int' and 'list'
ex_list가 리스트 형태 그대로 *args의 한 요소로 들어가기 때문에, sum() 계산이 불가능하다.
예를 들어 *args가 아니라 a,b,c,d,c 를 매개변수로 넣어보면,
def aver(a, b, c, d, e): # list 자체가 a에 들어감.
aver_result = sum(args) / len(args)
return aver_result
ex_list = [1,5,3,2,6] # 예시리스트
print(aver(ex_list))
# TypeError: aver() missing 4 required positional arguments: 'b', 'c', 'd', and 'e'
[1,5,3,2,6]이 각각 (a,b,c,d,e)에 들어가는 게 아니라 a에 통째로 들어간다.
그래서 b, c, d, e에 해당하는 필요한 인자가 없다는 오류가 뜬다.
이럴때는 인자에도 * (asterisk, 애스터리스크)를 붙여주면 된다.
*인자 : 리스트를 언팩하여 개별 인자로 전달
def aver(*args): # 함수 정의, 가변 인자 받기
aver_result = sum(args) / len(args) # 평균값 = 튜플요소합 / 튜플길이
return aver_result # aver 함수 결과값 반환
ex_list = [1,5,3,2,6] # 입력할 예시 리스트
print(aver(*ex_list)) # 개별 인자로 전달 # 3.4
별표를 인자에 붙여주면 언패킹 해주는 기능이 있다.
현재 리스트 형태로 패킹(packing)되어 있는 [1, 5, 3, 2, 6]을 뜯어서 언패킹(unpacking)해주면 1, 5, 3, 2, 6 각각 개별 요소가 되고, 얘네들을 개별 인자로 함수에 전달 할 수 있다.
'python' 카테고리의 다른 글
[Python 미니세션] 최소값의 인덱스 구하기 (0) | 2024.07.17 |
---|---|
[Python 미니세션] 딕셔너리 관련 함수 (0) | 2024.07.11 |
[Python 미니세션] 기본문제 (0) | 2024.07.10 |
[Python 기초] f-string (0) | 2024.07.09 |
[Python 기초] 집합 set (0) | 2024.07.09 |