Перейти к содержанию

Генераторы и ключевое слово yield

Генератор - это:

  • Функция, которая при каждом вызове возвращает новое значение
  • Объект, который можно вызвать специальным образом и он будет возвращать новое значение
  • Объект, реализующий протокол генератора
  • Частный случай итератора

yield - ключевое слово, которое позволяет создавать генераторы на основе функций и методов (подробнее - в статье).

Задание: генератор чисел Фибоначчи

Задача по нахождению чисел Фибоначчи - один из самых популярных примеров для обучения программированию. Для ее оптимального решения нужно неплохо разбираться в алгоритмах, но в этот раз можно расслабиться и вычислить все самым очевидным способом.

Подробно о числах Фибоначчи написано в википедии.

Вам надо написать две функции.

Одна функция - fibonacci().

Она возвращает последовательно числа Фибоначчи.

Вторая функция - основная, fibonacci_number(n).

В этой функции вам надо 'пролистать' все числа Фибоначчи до n-ного. Это функция должна вернуть n-ное число Фибоначчи.


  1. На вход в функцию подается целое положительное число n.
  2. Создайте генератор.
  3. Дойдите до n-ного числа Фибоначчи. Подумайте какой цикл здесь будет удобнее использовать.
  4. Не забудьте, что функция должна возвращать это число.

Загрузка тренажера...

Для любознательных

Для проверки правильной работы кода можно использовать инструкцию assert. Если утверждение, записанное после нее вернет True, программа продолжит свою работу. В противном случае, программа завершится с ошибкой AssertionError и выведет на экран строку, записанную после запятой. Попробуйте вставить этот код в конце вашей программы.

assert fibonacci_number(10) == 55
fn50=fibonacci_number(50)
assert fn50 == 12586269025, f"Неправильное 50 число Фибоначчи: {fn50} вместо 12586269025"