Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Generatori
Invio dei dati a un generatore
Obiettivo
Raccogli la lana e filala in filato utilizzando i fusi inviando dati a un generatore.
Alcune pecore stanno diventando un po' troppo lanose, sarebbe meglio tosarle e raccogliere la loro lana. Puoi quindi far passare la lana attraverso un fuso per produrre filato. Per fare ciò avremo bisogno di utilizzare un generatore, poiché le quantità di filato e di lana processate possono variare notevolmente.
Per prima cosa, definisci un generatore capace di filare il filato, chiamandolo spin(). Questo generatore deve essere impostato per utilizzare input esterni per operare. Legge i dati da yield e li assegna a una variabile, quindi ne modifica il contenuto aumentando la sua lunghezza ad ogni ciclo, per infine produrre un risultato.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
Poiché si tratta di un generatore, l'istruzione while() al suo interno può essere messa in pausa e modificata per produrre l'output desiderato; questo livello di controllo è il cuore di ciò che un generatore è e di come possa essere utile nel processare i dati. Per inserire dati nel generatore, definiscilo e utilizza la funzione send() per inviarci qualunque dato tu desideri, per esempio:
spindle = spin() # Crea un'istanza del generatore next(spindle) # Esegui il generatore per un singolo passo spindle.send(6) # Inserisci dati nel generatore # In questo caso stai inviando il numero 6
Dirigiti verso i segni X luminosi accanto ai tappeti colorati e affronta le pecore. Esiste una costante dizionario chiamata sheep che contiene il valore della lana che puoi tosare da ogni pecora. Usa la funzione speak() con il dizionario e il colore del tappeto su cui ti trovi, per tosare la lana delle pecore e controllare quanta ne hai raccolto. Per esempio: player.speak(sheep["green"]).
Ci sono in totale quattro (4) tappeti colorati: "green", "red", "blue" e "orange". Una volta tosate le pecore, dirigiti verso i segni X scuri accanto a ciascun tappeto colorato, dove si trovano i fusi. Usa send() per inserire nel generatore il numero di libbre di lana tosata da ciascuna pecora, nel rispettivo colore.
Per esempio, se tosando le pecore nel tappeto "green" ottieni 4 libbre di lana, recati al tappeto "green" accanto ai fusi e invia quei dati al generatore, come segue:
next(spindle) spindle.send( 4)
Fai questo per tutti i quattro (4) segni X scuri sui tappeti colorati per completare il livello.