Решение модуля 10.2 Инди-курс программирования на Python

Модуль 10.2 (Функция генератор. Создание генератора при помощи yield). Сегодня научимся писать функции, которые могут возвращать по одному значению, при этом «замораживая» своё выполнение, и при новом вызове функции она будет выполняться с того места, на котором она остановилась. Такая функция называется функцией генератором.

Напишите какое ключевое слово используется в функциях генераторах для возврата значения вместо return?

yield

Ваша задача создать функцию-генератор gen_squares, которая принимает аргумент n и генерирует квадраты чисел от 1 до n включительно. Ниже несколько вариантов использования:

for i in gen_squares(5):
    print(i)

# Будет напечатано
# 1
# 4
# 9
# 16
# 25
for i in gen_squares(3):
    print(i)

# Будет напечатано
# 1
# 4
# 9

Ваша задача написать только определение функции gen_squares

def gen_squares(x):         # объявляем функцию, которая принимает число
    for i in range(1, x+1): # циклом проходимся по числам от 1 до заданного числа(включительно)
        yield i**2          # с помощью yield возвращаем квадрат числа

Ваша задача создать функцию-генератор gen_fibonacci_numbers, которая принимает аргумент n и генерирует n-ое количество чисел Фибоначчи.

Будем считать, что последовательность Фибоначчи такая: 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

 Ниже несколько вариантов использования:

for i in gen_fibonacci_numbers(5):
    print(i)

# Будет напечатано
# 1
# 1
# 2
# 3
# 5
for i in gen_squares(10):
    print(i)

# Будет напечатано
# 1
# 1
# 2
# 3
# 5
# 8
# 13
# 21
# 34
# 55

Ваша задача написать только определение функции gen_fibonacci_numbers

def gen_fibonacci_numbers(n): # объявляем функцию, которая принимает число
    a, b = 1, 1               # первые 2 числа последовательности равны 1 и 1
    for i in range(n):        # циклом проходимся до заданного числа
        yield a               # возвращаем 1 число
        a, b = b, a + b       # в первое присваиваем второе и ко второму прибавляем предыдущее 

Ваша задача создать функцию-генератор my_range_gen, которая копирует работу range.

  1. my_range_gen можно запускать, передав ей один параметр stopmy_range_gen(stop)и она должна генерировать последовательность от 0 до stop не включительноfor i in my_range_gen(5): print(i) # Будет напечатано # 0 # 1 # 2 # 3 # 4
  2.  my_range_gen можно запускать, передав ей два параметра start и stopmy_range_gen(start, stop)и она должна генерировать последовательность от start включительно до stop не включительноfor i in my_range_gen(4, 8): print(i) # Будет напечатано # 4 # 5 # 6 # 7
  3.  my_range_gen можно запускать, передав ей три параметра startstop и stepmy_range_gen(start, stop, step)и она должна генерировать последовательность от start включительно до stop не включительно c шагом stepfor i in my_range_gen(4, 8, 2): print(i) # Будет напечатано # 4 # 6 for i in my_range_gen(8, 5, -1): print(i) # Будет напечатано # 8 # 7 # 6
  4. предусмотрите вариант запуска my_range_gen со значением step=0. При таком варианте вызова, функция не должна генерировать ни одной последовательности и закончить свою работу. Такое же поведение должно быть если переданы нелогичные значения startstop и step(см. примеры)for i in my_range_gen(4, 8, 0): print(i) # Ничего не печатает for i in my_range_gen(20, 10, 3): print(i) # Ничего не печатает, потому что нельзя пройти от 20 до 10 с шагом 3 for i in my_range_gen(1, 10, -2): print(i) # Ничего не печатает, потому что нельзя пройти от 1 до 10 с шагом -2  

Ваша задача написать только определение функции my_range_gen

 

Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы

Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

1 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
liony
liony
8 месяцев назад

def my_range_gen(*args):
   if len(args) == 1:
       start = 0
       stop = args[0]
       step = 1
   elif len(args) == 2:
       start = args[0]
       stop = args[1]
       step = 1
   elif len(args) == 3:
       start = args[0]
       stop = args[1]
       step = args[2]
   else:
       raise TypeError(«my_range_gen expects 1-3 arguments, got » + str(len(args)))

   if step == 0:
       return

   if (step > 0 and start >= stop) or (step < 0 and start <= stop):
       return

   i = start
   while (step > 0 and i < stop) or (step < 0 and i > stop):
       yield i
       i += step

1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x