Coding for KidsCoding for Kids
Kreativa NivåerUtmaningarLärarguide
Rösta på funktioner
Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå

Generatorer
Manuellt avancera en generator

Mål

Använd en generator i en manuell sekvens för att sammanställa och producera material för att baka bröd.

Framför dig finns en anläggning där du kan sammanställa lite bröddeg med hjälp av pressarna. Normalt skulle du använda funktionen combine() för att sätta ihop material, men det är inte fallet här; materialen måste först raffineras innan de kan kombineras.

För den här uppgiften kan vi använda generatorer eftersom de kan anpassas för att generera olika filtyper samt ha sin sekvens anropad på kommando istället för att automatiskt genereras som funktioner och loopar gör. Här är ett exempel:

def bread(): yield 5 yield "grain"

Ovanstående kod innehåller en generator med två yield-satser, varav en producerar ett verkligt tal och den andra en sträng. Vi kan framkalla generatorns värden när vi vill med hjälp av funktionen next(). Så här:

recipe = bread() # Ställer in generatorn player.place(next(recipe)) # Första värdet anropas player.collect(next(recipe)) # Andra värdet anropas

I exemplet ovan ställs generatorn in och next()-funktionen används med generatorn för att anropa det första yield-värdet för användning i funktionen place(). Detta upprepas med det andra värdet, men används istället i funktionen collect(). Detta gör det enkelt att anropa värden av olika typer i en sekvens utan att behöva använda flera listor eller variabler.

En generator med namnet bread() kommer att definieras i kodredigeraren men den kommer att kräva mängdtal för varje ingrediens för att du ska kunna raffinera brödegen. Dessa tal står skrivna på skylten intill anläggningen. Ställ in generatorn för användning genom att referera till den, så här: recipe = bread()

Först, gå mot den ljusa X-markeringen intill mjöltanken och collect() den sista mjölken i tanken med hjälp av generatorns next()-funktion, så här: player.collect(next(recipe)). Gå sedan mot den gyllene X-markeringen vid skylten och använd funktionen speak() för att få de mängdtal som behövs för att generatorn ska producera brödet och skriv ner dem i generatorn. Uppgiften lagras i en konstant med namnet "sign" och anropas så här: player.speak(sign).

När alla värden är inlagda i generatorn, gå in i anläggningen och använd player.place(next(recipe)) på mörka X-markeringar samt player.collect(next(recipe)) på ljusa X-markeringar för att slutföra nivån.

Kodbok