Продвинутый курс разработки на Python
Глава
>
Уровень
Генераторы
Ручной запуск генератора
Цель
Используйте генератор в ручной последовательности, чтобы собрать и произвести материалы для изготовления хлеба.
Впереди находится помещение, где вы можете замесить тесто для хлеба, используя прессы. Обычно вы бы использовали функцию combine(), чтобы собрать материалы, но в данном случае материалы нужно сначала обработать, прежде чем их можно будет собрать.
Для этой задачи мы можем использовать генераторы, так как их можно настроить для вывода различных типов данных, а также вызвать их последовательность по команде, а не автоматически, как это делают функции и циклы. Вот пример:
def bread():
yield 5
yield "grain"
В приведенном выше коде есть генератор с двумя операторами yield, один из которых производит действительное число, а другой — строку. Мы можем извлекать значения генератора по желанию, используя функцию next(). Вот так:
recipe = bread() # Инициализация генератора player.place(next(recipe)) # Вызывается первое значение player.collect(next(recipe)) # Вызывается второе значение
В приведенном выше примере, генератор инициализируется, и функция next() используется с генератором, чтобы вызвать первое значение yield для использования в функции place(). Это повторяется со вторым значением, которое, однако, используется в функции collect(). Это позволяет легко вызывать значения различных типов в последовательности, без необходимости использовать несколько списков или переменных.
Генератор с именем bread() будет определен в редакторе кода, но для него потребуются числовые значения для каждого ингредиента, чтобы вы могли обработать тесто для хлеба. Эти числа написаны на табличке рядом с помещением. Настройте генератор для использования, ссылаясь на него вот так: recipe = bread()
Сначала идите к светлой отметке X рядом с резервуаром для молока и используйте collect(), чтобы собрать остатки молока в резервуаре, используя функцию генератора next(), вот так: player.collect(next(recipe)). Затем идите к золотой отметке X рядом с табличкой и используйте функцию speak(), чтобы получить числовые значения, необходимые для генератора, чтобы произвести хлеб, и запишите их в генератор. Данные хранятся в константе с именем "sign" и будут вызваны вот так: player.speak(sign).
После того как все значения введены в генератор, зайдите в помещение и используйте player.place(next(recipe)) на темных отметках X и player.collect(next(recipe)) на светлых отметках X, чтобы завершить уровень.