Coding for KidsCoding for Kids
Poziomy KreatywneWyzwaniaPrzewodnik dla Nauczycieli
Głosuj na funkcje
Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom

Generatory
Tworzenie Generatora

Czasami możesz chcieć generować wartości w sposób ciągły, a nie jako jednorazowy wynik. Podobnie jak funkcje, generatory są pisane i wykonywane w ten sam sposób, z tym że zamiast return() używają yield(), gdy produkują wynik.

W tym ćwiczeniu musisz napełniać butelki mlekiem z cystern w stajni. Użyj generatora, aby iterować napełnianie butelek i upewnić się, że wszelkie nadwyżki mleka są zbierane z cystern.

Guide

Cel

Napełnij butelki mlekiem, pompując mleko ze zbiorników za pomocą generatorów.

Maszyny przechowujące mleko krowie są prawie pełne, musisz butelkować mleko i przechowywać je, zanim się zepsuje. To może być nieco trudne zadanie przy użyciu normalnych metod, a ilość mleka, którą możesz wyekstrahować, może się nieco różnić. Na szczęście możesz użyć generatorów, aby ten proces był płynny i prosty.

Są dwa (2) zbiorniki z mlekiem, które trzeba wypompować i butelkować. Każda maszyna ma komory, które przechowują mleko, są one reprezentowane przez stałe listy o nazwach: tank_a i tank_b. Ponadto, każdy zbiornik ma tendencję do posiadania nadwyżki, którą możesz zebrać.

Generatory mają tę samą składnię co funkcje, ale użyją yield zamiast return dla swojego wyniku. Ustaw generator o nazwie fill() i ustaw go z argumentem list, to będzie miejsce, gdzie wprowadzisz wspomniane wcześniej stałe.

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

Generator odczytuje dane z trzech (3) pól w stałych listach, reprezentowanych przez komory w maszynie, i dodaje nadwyżkę na końcu, która wynosi pięć (5).

Zbierz obiekt koszyka w polu, aby uzyskać dostęp do potrzebnych butelek do napełnienia i przejdź do dwóch (2) miejsc oznaczonych X, aby zebrać mleko, używając pętli for.

Dzięki instrukcji yield, wartości wytwarzane przez generator mogą być odczytywane bezpośrednio z pętli for. Ustaw taką pętlę, która używa funkcji collect(), aby zdobyć "mleko" z maszyny. Następnie użyj speak(), aby sprawdzić, ile mleka każda butelka przechowała. Na przykład:

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

Napisz i użyj tej pętli for na obu miejscach X, na jasnym miejscu X użyj argumentu tank_a, a na ciemnym miejscu X użyj argumentu tank_b, aby ukończyć poziom.

Księga Kodów