5단원 과제 정답: 함수¶
문제 1. 함수 기본 — return값 추적¶
① 6
② 16
③ 12
④ 16
해설
| 항목 | 식 | 계산 | 결과 |
|---|---|---|---|
| ① | double(3) |
3 * 2 |
6 |
| ② | square(4) |
4 ** 2 |
16 |
| ③ | double(a) = double(6) |
6 * 2 |
12 |
| ④ | square(double(2)) = square(4) |
4 ** 2 |
16 |
함수의 반환값은 그대로 다른 함수의 인수로 넘길 수 있습니다.
문제 2. None 반환¶
① Hello
② None
③ 30
④ <class 'NoneType'>
해설
| 항목 | 식 | 결과 | 이유 |
|---|---|---|---|
| ① | say("Hello") 실행 중 print(msg) |
Hello 출력 |
|
| ② | x = say(...) → say는 return 없음 |
x는 None |
|
| ③ | y = add(10, 20) |
y는 30 |
|
| ④ | type(x) |
<class 'NoneType'> |
x가 None이므로 |
return이 없는 함수는 암묵적으로 None을 반환합니다.
문제 3. 스코프 — 지역 변수와 전역 변수¶
① 200
② 100
③ 100
해설
x = 100 # 전역 x
def f():
x = 200 # 새로운 지역 x (전역 x와 별개)
print(x) # 지역 x = 200
def g():
print(x) # 지역 x 없음 → 전역 x = 100
f() 안에서 x = 200은 새로운 지역 변수를 만드는 것이지, 전역 x를 바꾸는 것이 아닙니다.
문제 4. global 키워드¶
① 10
해설
total = 0
add_to_total(5) → total = 0 + 5 = 5
add_to_total(3) → total = 5 + 3 = 8
add_to_total(2) → total = 8 + 2 = 10
global total 덕분에 세 번 호출 결과가 누적됩니다. global 없이는 UnboundLocalError.
문제 5. import와 math 모듈¶
① 3
② 4
③ 5.0
④ 3.14
해설
| 항목 | 함수 | 결과 | 이유 |
|---|---|---|---|
| ① | math.floor(3.7) |
3 |
내림 — 3.7 이하 최대 정수 |
| ② | math.ceil(3.2) |
4 |
올림 — 3.2 이상 최소 정수 |
| ③ | math.sqrt(25) |
5.0 |
√25 = 5, float 반환 |
| ④ | round(math.pi, 2) |
3.14 |
π를 소수점 2자리로 반올림 |
문제 6. 기본값 매개변수¶
① 9
② 27
③ 1024
해설
| 항목 | 호출 | exp값 | 계산 |
|---|---|---|---|
| ① | power(3) |
2 (기본값) |
3 ** 2 = 9 |
| ② | power(3, 3) |
3 |
3 ** 3 = 27 |
| ③ | power(2, 10) |
10 |
2 ** 10 = 1024 |
문제 7. 은행 계좌¶
balance = 0
def deposit(amount):
global balance
balance += amount
def withdraw(amount):
global balance
balance -= amount
def show():
print(f"잔액: {balance}")
deposit(1000)
show()
withdraw(300)
show()
deposit(500)
show()
빈칸 정답
| 빈칸 위치 | 정답 | 이유 |
|---|---|---|
______ balance |
global |
전역 변수 balance를 수정하려면 선언 필요 |
balance ______ amount |
+= |
입금이므로 더함 |
f"잔액: {______}" |
balance |
전역 balance 값 출력 |
문제 8. 함수 완성¶
def max_abs(a, b):
if abs(a) >= abs(b):
return a
else:
return b
print(max_abs(5, -3)) # 5
print(max_abs(-10, 4)) # -10
print(max_abs(-7, 7)) # -7
빈칸 정답
| 빈칸 위치 | 정답 | 이유 |
|---|---|---|
______(a) >= abs(b) |
abs |
a의 절댓값을 구하는 내장 함수 |
______ a |
return |
a를 반환 |
return ______ |
b |
절댓값이 더 큰 b를 반환 |
문제 9. 팩토리얼¶
def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
print(factorial(1)) # 1
print(factorial(3)) # 6
print(factorial(5)) # 120
빈칸 정답
| 빈칸 위치 | 정답 | 이유 |
|---|---|---|
range(1, ______) |
n + 1 |
1부터 n까지 반복하려면 n+1이 stop |
result ______ i |
*= |
누적 곱셈 |
return ______ |
result |
계산된 팩토리얼 반환 |
문제 10. 통계 함수¶
def average(numbers):
if len(numbers) == 0:
return 0
return sum(numbers) / len(numbers)
scores1 = [10, 20, 30, 40, 50]
scores2 = [90, 80, 85, 75, 95]
print(average(scores1)) # 30.0
print(average(scores2)) # 85.0
빈칸 정답
| 빈칸 위치 | 정답 | 이유 |
|---|---|---|
if ______(numbers) == 0 |
len |
리스트 길이 확인 |
return ______(numbers) / len |
sum |
합계를 구하는 내장 함수 |
print(average(______)) |
scores1 |
첫 번째 리스트 전달 |