Генераторы и ключевое слово yield
Генератор - это:
- Функция, которая при каждом вызове возвращает новое значение
- Объект, который можно вызвать специальным образом и он будет возвращать новое значение
- Объект, реализующий протокол генератора
- Частный случай итератора
yield - ключевое слово, которое позволяет создавать генераторы на основе функций и методов (подробнее - в статье).
Задание: генератор чисел Фибоначчи
Задача по нахождению чисел Фибоначчи - один из самых популярных примеров для обучения программированию. Для ее оптимального решения нужно неплохо разбираться в алгоритмах, но в этот раз можно расслабиться и вычислить все самым очевидным способом.
Подробно о числах Фибоначчи написано в википедии.
Вам надо написать две функции.
Одна функция - fibonacci().
Она возвращает последовательно числа Фибоначчи.
Вторая функция - основная, fibonacci_number(n).
В этой функции вам надо 'пролистать' все числа Фибоначчи до n-ного. Это функция должна вернуть n-ное число Фибоначчи.
- На вход в функцию подается целое положительное число n.
- Создайте генератор.
- Дойдите до n-ного числа Фибоначчи. Подумайте какой цикл здесь будет удобнее использовать.
- Не забудьте, что функция должна возвращать это число.
Для любознательных
Для проверки правильной работы кода можно использовать инструкцию assert. Если утверждение, записанное после нее вернет True, программа продолжит свою работу. В противном случае, программа завершится с ошибкой AssertionError и выведет на экран строку, записанную после запятой. Попробуйте вставить этот код в конце вашей программы.
assert fibonacci_number(10) == 55
fn50=fibonacci_number(50)
assert fn50 == 12586269025, f"Неправильное 50 число Фибоначчи: {fn50} вместо 12586269025"