Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom
Generatory
Wysyłanie danych do generatora
Cel
Zbierz wełnę i prządź ją w przędzę za pomocą wrzecion poprzez przesyłanie danych do generatora.
Niektóre owce stały się nieco zbyt wełniste, najlepiej byłoby je ostrzyc i zebrać wełnę. Następnie można przepuścić wełnę przez wrzeciono, aby uzyskać przędzę. Aby to osiągnąć, potrzebujemy użyć generatora, jako że ilości przetworzonej przędzy i wełny mogą się znacznie różnić.
Najpierw zdefiniuj generator zdolny do przędzenia, nazwij go spin(), generator ten musi być skonfigurowany do użycia danych wejściowych, aby działać. Czyta dane z yield i umieszcza je w zmiennej, następnie modyfikuje jej zawartość, zwiększając jej długość z każdym cyklem, ostatecznie produkując wynik.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
Ponieważ jest to generator, instrukcję while() wewnątrz można zatrzymać i zmodyfikować, aby uzyskać pożądane wyjście, taki poziom kontroli znajduje się w sercu tego, czym jest generator i jak może być przydatny podczas przetwarzania danych. Aby wprowadzić dane do generatora, zdefiniuj go i użyj funkcji send(), aby przekazać mu dowolne dane, na przykład:
spindle = spin() # Utwórz instancję generatora next(spindle) # Uruchom generator o krok spindle.send(6) # Wstaw dane do generatora # W tym przypadku przesyłasz mu liczbę 6
Przejdź do miejsca oznaczonego lampami X przy kolorowych dywanach i spójrz na owce. Istnieje stała słownikowa o nazwie sheep, która zawiera wartość, ile wełny można ostrzyc z każdej owcy. Użyj funkcji speak() ze słownikiem i kolorem dywanu, na którym stoisz, aby ostrzyc wełnę owcy i sprawdzić, ile zebrałeś. Przykład: player.speak(sheep["green"]) .
Istnieją cztery (4) kolorowe dywany w sumie: "green", "red", "blue" i "orange". Kiedy już ostrzyżesz owce, przejdź do ciemnych znaków X przy każdym kolorowym dywanie, gdzie znajdują się wrzeciona. Użyj send() aby wprowadzić liczbę funtów wełny ostrzyżonej z każdej owcy w ich odpowiednim kolorze do generatora.
Na przykład, jeśli podczas strzyżenia owcy na zielonym dywanie ostrzyżesz 4 funty wełny, idź do zielonego dywanu przy wrzecionach i przekaż te dane do generatora, w ten sposób:
next(spindle) spindle.send(4)
Zrób to dla wszystkich czterech (4) ciemnych znaków X na kolorowych dywanach, aby ukończyć poziom.