Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel
Generatori
Trimiterea datelor către un generator
Obiectiv
Adună lâna și transform-o în ață folosind fiii de tors prin trimiterea datelor către un generator.
Unele oi devin puțin prea lâncicoase, cel mai bine ar fi să le tundem și să adunăm lâna. Apoi poți trece lâna printr-un fir de tors pentru a produce ață. Pentru a realiza acest lucru, va trebui să folosim un generator, deoarece cantitățile de ață și lână prelucrate pot varia foarte mult.
Mai întâi, definește un generator capabil să torsă ață, denumindu-l spin(). Acest generator trebuie să fie configurat pentru a utiliza input extern pentru a funcționa. Acesta citește date de la yield și le plasează într-o variabilă, apoi își modifică conținutul prin creșterea lungimii sale cu fiecare ciclu, producând în final un rezultat.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
Deoarece acesta este un generator, instrucțiunea while() din interior poate fi oprită și modificată pentru a produce rezultatul dorit; acest nivel de control este esențial pentru ceea ce este un generator și cât de util poate fi atunci când prelucrezi date. Pentru a introduce date în generator, definește-l și folosește funcția send() pentru a-i trimite orice date dorești, de exemplu:
spindle = spin() # Create an instance of the generator next(spindle) # Run the generator a single step spindle.send(6) # Insert data into the generator # In this case you're sending it the number 6
Mergi către semnele X luminoase de lângă covoarele colorate și înfruntă oile. Există o constantă de tip dicționar denumită sheep care conține valoarea de lână pe care o poți tunde de la fiecare oaie. Folosește funcția speak() împreună cu dicționarul și culoarea covorului pe care te afli, pentru a tunde lâna oilor și a verifica cantitatea adunată. De exemplu: player.speak(sheep["green"]) .
Există în total patru (4) covoare colorate: "green" , "red" , "blue" și "orange". Odată ce ai tuns oile, mergi la semnele X întunecate de lângă fiecare covor colorat, unde se află fiii de tors. Folosește send() pentru a introduce numărul de lire de lână tunsă de la fiecare oaie, în culoarea respectivă, în generator.
De exemplu, dacă, în timp ce tunzi oile de pe covorul "green", tunzi 4 lire de lână, mergi la covorul "green" lângă fiii de tors și trimite acele date în generator, astfel:
next(spindle) spindle.send( 4)
Fă această operație pentru toate cele patru (4) semne X întunecate de pe covoarele colorate pentru a completa nivelul.