Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Generatorer
Sender data til en generator
Målsetning
Samle ull og spinne det til garn ved hjelp av spinnerne ved å sende data til en generator.
Noen av sauene blir litt for ullpregede, det er best å klippe dem og samle ullen deres. Du kan deretter føre ullen gjennom en spinner for å produsere garn. For å oppnå dette må vi bruke en generator siden mengden garn og ull som behandles kan variere kraftig.
Definer først en generator som er i stand til å spinne garn, og kall den spin(). Denne generatoren må settes opp for å bruke ekstern input for å fungere. Den leser data fra yield og plasserer det i en variabel, deretter endrer den innholdet ved å øke lengden med hver syklus, og produserer til slutt et resultat.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
Fordi dette er en generator, kan while()-løkka inni pauses og endres for å produsere den outputen vi ønsker. Dette kontrollnivået er kjernen i hva en generator er, og hvordan den kan være nyttig når man behandler data. For å sette inn data i generatoren, definer den og bruk send()-funksjonen for å mate den med hvilken som helst data du ønsker, for eksempel:
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
Gå til det lyse X-merket ved de fargede teppene og vend deg mot sauene. Det finnes en ordbokskonstant kalt sheep som inneholder verdien av hvor mye ull du kan klippe fra hver sau. Bruk speak()-funksjonen med ordboken og fargen på teppet du står på, for å klippe sauenes ull og sjekke hvor mye du har samlet. For eksempel: player.speak(sheep["green"]) .
Det finnes totalt fire (4) fargede tepper: "green" , "red" , "blue" og "orange". Når du har klippet sauene, gå til de mørke X-merkene ved hvert farget teppe der spinnerne er plassert. Bruk send() for å sende antall pund ull du har klippet fra hver sau i deres respektive farger til generatoren.
For eksempel, hvis du når du klipper sauene på det "green" teppet, klipper 4 pund ull, gå til det "green" teppet ved spinnerne og send disse dataene til generatoren, slik:
next(spindle) spindle.send( 4)
Gjør dette for alle fire (4) mørke X-merker på de fargede teppene for å fullføre nivået.