Avanceret Python Udviklingskursus
Kapitel
>
Niveau
Generatorer
Manuelt fremrykke af en generator
Mål
Brug generator i en manuel sekvens til at samle og producere materialer til at lave brød.
Forude er der en facilitet, hvor du kan samle noget brøddej ved at bruge pressen. Normalt ville du bruge funktionen combine() til at samle materialer, men det er ikke tilfældet her; materialerne skal forarbejdes først, før de kan samles.
Til denne opgave kan vi bruge generatorer, da de kan tilpasses til at outputte forskellige filtyper samt lade deres sekvens blive kaldt på kommando i stedet for automatisk output, som funktioner og løkker gør. Her er et eksempel:
def bread():
yield 5
yield "grain"
Ovenstående kode har en generator med to yield-udsagn, hvoraf det ene producerer et reelt tal og det andet en streng. Vi kan frembringe generatorens værdier, når vi vil, ved at bruge funktionen next(). Som dette:
recipe = bread() # Opsætter generatoren player.place(next(recipe)) # Første værdi hentes player.collect(next(recipe)) # Anden værdi hentes
I eksemplet ovenfor er generatoren opsat, og funktionen next() bruges med generatoren til at hente den første yield-værdi til brug i funktionen place(). Dette gentages med den anden værdi, som i stedet anvendes i funktionen collect(). Dette gør det nemt at kalde værdier af forskellige typer i en sekvens uden at skulle bruge flere lister eller variabler.
En generator ved navn bread() vil blive defineret i kodeeditoren, men den kræver mængdetal for hver ingrediens, for at du kan forfine brøddejen. Disse tal er skrevet på skiltet ved siden af faciliteten. Opsæt generatoren til brug ved at referere til den, sådan her: recipe = bread()
Gå først til det lyse X-mærke ved siden af mælketanken og collect() den sidste mælk i tanken ved hjælp af generatorens next()-funktion, sådan her: player.collect(next(recipe)). Gå derefter til det gyldne X-mærke ved siden af skiltet og brug funktionen speak() for at få de mængdetal, der er nødvendige for, at generatoren kan producere brødet, og skriv dem ind i generatoren. Dataene er gemt i en konstant ved navn "sign" og vil blive kaldt sådan her: player.speak(sign).
Når alle værdier er indtastet i generatoren, skal du gå ind i faciliteten og bruge player.place(next(recipe)) på mørke X-mærker og player.collect(next(recipe)) på lyse X-mærker for at fuldføre niveauet.