콘텐츠로 이동

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 없음 xNone
y = add(10, 20) y30
type(x) <class 'NoneType'> xNone이므로

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 첫 번째 리스트 전달