Coding for KidsCoding for Kids
Креативні РівніВикликиПосібник для Вчителів
Голосувати за функції
Поглиблений курс розробки на Python
Розділ
>
Рівень

Генератори
Створення Генератора

Іноді вам може знадобитися генерувати значення постійно, а не отримувати одноразовий результат. Подібно до того, як працюють функції, генератори пишуться та виконуються таким же чином, за винятком того, що вони використовують yield() замість return(), коли створюють вихідні дані.

У цій вправі вам потрібно наповнити пляшки молоком з резервуарів на стайні. Використовуйте генератор, щоб ітерувати процес наповнення пляшок і впевнитися, що будь-яке надлишкове молоко зібране з резервуарів.

Guide

Мета

Заповніть пляшки молоком, перекачуючи його з резервуарів за допомогою генераторів.

Машини для зберігання коров’ячого молока майже повні. Потрібно розлити молоко у пляшки та зберегти його, перш ніж воно зіпсується. Це може бути дещо складним завданням, якщо використовувати звичайні засоби, адже кількість молока, яку можна добути, може дещо відрізнятися. На щастя, ви можете використовувати генератори, щоб зробити цей процес плавним і простим.

Існує два (2) резервуари з молоком, які потрібно відкачати та розлити у пляшки. Кожна машина має відділи для зберігання молока, які представлені константами списків з іменами: tank_a та tank_b. Крім того, в кожному резервуарі зазвичай залишається невеликий залишок, який також можна зібрати.

Генератори використовують такий самий синтаксис, як і функції, але замість return для їхнього виводу використовується yield. Налаштуйте генератор з назвою fill() і використовуйте для нього аргумент list, що буде місцем для введення констант, зазначених у попередньому абзаці.

def fill(list): for x in range(3): yield list[x] yield 5

Генератор зчитує дані з трьох (3) полів у константах списку, які представлені відділами у машині, та додає залишок наприкінці, що дорівнює п'яти (5).

Зберіть об'єкт корзини у полі, щоб отримати доступ до пляшок, необхідних для наповнення, і підійдіть до двох (2) X міток, щоб зібрати молоко, використовуючи цикл for.

Завдяки оператору yield значення, генеровані від генератора, можуть бути зчитані безпосередньо з циклу for. Налаштуйте один цикл, який використовує функцію collect(), щоб отримати "milk" з машини. Після цього використовуйте speak() для перевірки, скільки молока зберігає кожна пляшка. Наприклад:

for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))

Напишіть та використовуйте цей цикл for на обох мітках X, на світлому X використовуйте аргумент tank_a, а на темному X використовуйте аргумент tank_b, щоб завершити рівень.

Книга Коду