Поглиблений курс розробки на 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 позначеннях, щоб завершити рівень.