연습문제
함수 심화 연습문제입니다. 제너레이터를 활용한 데이터 필터링, 피보나치 수열 제너레이터, 실행 시간 측정 데코레이터를 구현합니다.
1. 연습문제
1.1 문제 1
회전초밥집에서 '어'가 나오는 초밥만을 먹어 비용을 계산하는 코드를 완성해주세요. 단, 제너레이터를 만들어야 합니다.
def gen(data):
pass
def solution(data):
return sum(gen(data))
solution([['광어초밥', 1000], ['연어초밥', 2000], ['계란초밥', 3000], ['문어초밥', 4000], ['장어초밥', 5000]])
1.2 문제 2
다음과 같이 동작하는 제너레이터 함수 fibonacci(n)를 완성하세요. 주어진 숫자 n까지의 피보나치 수열을 반환합니다.
def fibonacci(n):
pass
for i in fibonacci(5):
print(i)
'''
출력
1
1
2
3
5
'''
1.3 문제 3
주어진 함수의 실행 시간을 측정하여 출력하는 데코레이터 time_it를 작성하세요. (힌트: time 모듈의 time() 함수를 사용하세요.)
1.4 정답
1.4.1 문제 1 정답
def gen(data):
for name, price in data:
if '어' in name:
yield price
def solution(data):
return sum(gen(data))
result = solution([['광어초밥', 1000], ['연어초밥', 2000], ['계란초밥', 3000], ['문어초밥', 4000], ['장어초밥', 5000]])
print(result) # 12000
1.4.2 문제 2 정답
def fibonacci(n):
prev = 1
curr = 1
count = 0
while count < n:
yield prev
prev, curr = curr, prev + curr
count += 1
for i in fibonacci(5):
print(i)
1.4.3 문제 3 정답
import time
def time_it(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"실행 시간: {end_time - start_time:.4f}초")
return result
return wrapper
@time_it
def calculate_fibonacci(n):
def fib(n):
prev = 1
curr = 1
count = 0
while count < n:
yield prev
prev, curr = curr, prev + curr
count += 1
return list(fib(n))
result = calculate_fibonacci(20)
print(result)