Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå
Generatorer
Skickar data till en generator
Mål
Samla ull och spinn den till garn med hjälp av spinnarna genom att skicka data till en generator.
Några av fåren börjar bli lite för ulliga, det vore bäst att klippa av deras ull och samla in den. Du kan sedan köra ullen genom en spinnare för att producera garn. För att uppnå detta behöver vi använda en generator eftersom mängden garn och ull som bearbetas kan variera mycket.
Definiera först en generator som kan spinna garn, och namnge den spin(). Denna generator måste sättas upp för att använda extern indata för att fungera. Den läser data från yield och placerar den i en variabel, sedan modifierar den innehållet genom att öka dess längd vid varje cykel, och slutligen producerar ett 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))
Eftersom detta är en generator kan while()-satsen inuti pausas och modifieras för att producera den utdata vi önskar. Denna kontrollnivå är kärnan i vad en generator är och hur den kan vara användbar vid bearbetning av data. För att lägga in data i generatorn, definiera den och använd funktionen send() för att mata in valfri data, till exempel:
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å till de ljusa X-markeringarna bredvid de färgade mattorna och möt fåren. Det finns en konstant ordbok som heter sheep som innehåller värdet på hur mycket ull du kan klippa av från varje får. Använd funktionen speak() med ordboken och färgen på mattan du står på för att klippa ull från fåren och kontrollera hur mycket du har samlat in. Till exempel: player.speak(sheep["green"]) .
Det finns totalt fyra (4) färgade mattor: "green" , "red" , "blue" och "orange". När du har klippt ullen från fåren, gå till de mörka X-markeringarna vid varje färgad matta där spinnarna är placerade. Använd send() för att ange antalet pund ull som har klippts från varje får i dess respektive färg i generatorn.
Till exempel, om du klipper 4 pund ull från fåren vid den "green" mattan, gå till den "green" mattan med spinnarna och skicka den datan till generatorn, på följande sätt:
next(spindle) spindle.send( 4)
Gör detta vid alla fyra (4) mörka X-markeringarna på de färgade mattorna för att slutföra nivån.