Coding for KidsCoding for Kids
Kreative NiveauerUdfordringerLærervejledning
Stem på funktioner
Avanceret Python Udviklingskursus
Kapitel
>
Niveau

Generatorer
Opret en generator

Nogle gange vil du måske generere værdier konsekvent i stedet for et enkelt output. Ligesom funktioner fungerer, skrives og udføres generatorer på samme måde, bortset fra at de bruger yield() i stedet for return() når de producerer et output.

I denne øvelse skal du fylde flasker med mælk fra tankene i stalden. Brug en generator til at iterere over, hvordan flaskerne fyldes, og sørg for at enhver overskydende mælk opsamles fra tankene.

Guide

Mål

Fyld flaskerne med mælk ved at pumpe mælketankene ved hjælp af generatorer.

Maskinerne, der opbevarer komælk, er næsten fulde. Du skal flaskefylde mælken og opbevare den, inden den bliver dårlig. Dette kan være en smule vanskeligt med normale metoder, og mængden af mælk, du kan udtrække, kan variere en smule. Heldigvis kan du bruge generatorer til at gøre denne proces problemfri og ligetil.

Der er to (2) tanke med mælk, der skal have mælken pumpet og flaskefyldt. Hver maskine har rum, der opbevarer mælk; disse er repræsenteret af listekonstanter navngivet: tank_a og tank_b. Derudover har hver tank typisk et overskud, som du kan indsamle.

Generatorer følger den samme syntaks som funktioner, men vil bruge yield i stedet for return for deres output. Opsæt en generator med navnet fill() og giv den argumentet list, hvilket vil være, hvor du indtaster de konstanter, der er nævnt i afsnittet ovenfor.

def fill(list): for x in range(3): yield list[x] yield 5

Generatoren læser data fra de tre (3) felter i listekonstanterne, som repræsenterer rummene i maskinen, og tilføjer til sidst et overskud, der er fem (5).

Indsaml kurvobjektet på feltet for at få adgang til de flasker, der er nødvendige for at fylde, og gå til de to (2) X-mærker for at indsamle mælken ved hjælp af en for-løkke.

Takket være yield-udsagnet kan de værdier, der produceres af generatoren, læses direkte fra en for-løkke. Opsæt en, der bruger funktionen collect() til at indsamle "milk" fra maskinen. Følg derefter op ved at bruge speak() for at tjekke, hvor meget mælk hver flaske har opbevaret. For eksempel:

for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))

Skriv og brug denne for-løkke på begge X-mærker, hvor du på det lyse X-mærke bruger argumentet tank_a og på det mørke X-mærke bruger argumentet tank_b for at fuldføre niveauet.

Kodebog