Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Generátorok
Adatok küldése egy generátornak
Cél
Gyűjtsd össze a gyapjút és csavard fonallá a forgóberendezések segítségével, úgy, hogy adatokat küldesz egy generatorba.
Néhány juh kicsit túl gyapjas lett, érdemes lenne leborotválni őket és összegyűjteni a gyapjukat. Ezt követően a gyapjút átfuthatod egy forgóberendezésen, hogy fonalat állíts elő belőle. Ehhez egy generátorra lesz szükségünk, mivel a feldolgozott fonal és gyapjú mennyisége nagyban változhat.
Először definiálj egy generátort, amely képes fonalat csavarni, nevezzük el spin() -nak. Ennek a generátornak külső bemenet használatára kell legyen készítve a működéshez. A yield által olvasott adatot egy változóban tárolja, majd minden ciklus során megnöveli annak hosszát, végül eredményt adva vissza.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
Mivel ez egy generátor, a benne lévő while() ciklust meg lehet állítani és módosítani úgy, hogy a kívánt kimenetet állítsa elő. Ez a szintű vezérlés a generátorok lényegét képezi, és arra ad lehetőséget, hogy hasznosak legyenek az adatok feldolgozásában. Az adat generátorba való beszúrásához definiáld azt, majd használd a send() függvényt, hogy bármilyen adatot átadj neki, például:
spindle = spin() # Hozz létre egy példányt a generátorból next(spindle) # Futtasd a generátor egy lépését spindle.send(6) # Adj adatot a generátornak # Ebben az esetben a 6-os számot küldöd
Sétálj el a fény felé X jelzéseihez a színes szőnyegek mellett, és állj szembe a juhokkal. Van egy sheep nevű szótár konstans, amely azt a értéket tartalmazza, hogy mennyi gyapjút lehet levágni minden juhról. Használd a speak() függvényt a szótárral és a szőnyeg színével, amin állsz, hogy levágd a juhok gyapjút, és ellenőrizd, mennyit gyűjtöttél össze. Például: player.speak(sheep["green"]) .
Összesen négy (4) színes szőnyeg van: "green", "red", "blue" és "orange". Miután levágtad a juhokat, sétálj el a sötét X jelzésekhez minden színes szőnyegnél, ahol a forgóberendezések találhatóak. Használd a send() függvényt, hogy belépítsd a levágott gyapjú fontok számát az egyes juhoktól a megfelelő színű szőnyegek mellett elhelyezkedő generátorba.
Például, ha a "green" szőnyegnél levágtad a juhokról 4 font gyapjút, menj el a "green" szőnyegnél a forgóberendezésekhez, és add át azt az adatot a generátornak így:
next(spindle) spindle.send( 4)
Tedd ugyanezt mind a négy (4) sötét X jelzésnél a színes szőnyegeken, hogy teljesítsd a szintet.