WeniVooks

검색

견고한 파이썬

연습문제

1번 문제

회전초밥집에서 ‘어’가 나오는 초밥만을 먹어 비용을 계산하는 코드를 완성해주세요. 단, 제너레이터를 만들어야 합니다.

def gen(data):
    pass
 
def solution(data):
    sum(gen(data))
 
solution([['광어초밥', 1000], ['연어초밥', 2000], ['계란초밥', 3000], ['문어초밥', 4000], ['장어초밥', 5000]])
def gen(data):
    pass
 
def solution(data):
    sum(gen(data))
 
solution([['광어초밥', 1000], ['연어초밥', 2000], ['계란초밥', 3000], ['문어초밥', 4000], ['장어초밥', 5000]])

2번 문제

다음과 같이 동작하는 제너레이터 함수 fibonacci(n)를 완성하세요. 주어진 숫자 n까지의 피보나치 수열을 반환합니다.

def fibonacci(n):
    pass
 
for i in fibonacci(5):
    print(i)
 
'''
출력
1
1
2
3
5
'''
def fibonacci(n):
    pass
 
for i in fibonacci(5):
    print(i)
 
'''
출력
1
1
2
3
5
'''

3번 문제

주어진 함수의 실행 시간을 측정하여 출력하는 데코레이터 time_it를 작성하세요. (힌트: time 모듈의 time() 함수를 사용하세요.)

  • 정답

    1. code

      def gen(data):
          for name, price in data:
              if '어' in name:
                  yield price
       
      def solution(data):
          return sum(gen(data))
       
      solution([['광어초밥', 1000], ['연어초밥', 2000], ['계란초밥', 3000], ['문어초밥', 4000], ['장어초밥', 5000]])
      def gen(data):
          for name, price in data:
              if '어' in name:
                  yield price
       
      def solution(data):
          return sum(gen(data))
       
      solution([['광어초밥', 1000], ['연어초밥', 2000], ['계란초밥', 3000], ['문어초밥', 4000], ['장어초밥', 5000]])
    2. code

      def fib(n):
          pre = 1
          next = 1
          count = 0
          while True:
              temp = pre + next
              yield pre
              pre, next = next, temp
              count += 1
              if count == n:
                  break
       
      for i in fib(5):
          print(i)
      def fib(n):
          pre = 1
          next = 1
          count = 0
          while True:
              temp = pre + next
              yield pre
              pre, next = next, temp
              count += 1
              if count == n:
                  break
       
      for i in fib(5):
          print(i)
    3. code

      import time
       
      def time_it(func):
          def wrapper():
              start_time = time.time()
              func()
              end_time = time.time()
              print(f"{end_time - start_time:.4f}s")
          return wrapper
       
      @time_it
      def main():
          def fib(n):
              pre = 1
              next = 1
              count = 0
              while True:
                  temp = pre + next
                  yield pre
                  pre, next = next, temp
                  count += 1
                  if count == n:
                      break
       
          for i in fib(20):
              print(i)
       
      main()
      import time
       
      def time_it(func):
          def wrapper():
              start_time = time.time()
              func()
              end_time = time.time()
              print(f"{end_time - start_time:.4f}s")
          return wrapper
       
      @time_it
      def main():
          def fib(n):
              pre = 1
              next = 1
              count = 0
              while True:
                  temp = pre + next
                  yield pre
                  pre, next = next, temp
                  count += 1
                  if count == n:
                      break
       
          for i in fib(20):
              print(i)
       
      main()
{"packages":["numpy","pandas","matplotlib","lxml"]}
13.10 nonlocal14장 부록