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

Generatorer
Skapa en generator

Ibland kanske du vill generera värden kontinuerligt snarare än en engångsutmatning.

Precis som funktioner fungerar, skrivs och exekveras generatorer på samma sätt, förutom att de använder yield() istället för return() när de producerar ett resultat.

I denna övning måste du fylla flaskor med mjölk från tankarna i stallet. Använd en generator för att iterera över att fylla flaskorna och se till att överskottsmjölken samlas in från tankarna.

Guide

Mål

Fyll på flaskor med mjölk genom att pumpa mjölktankarna med hjälp av generatorer.

Maskinerna som lagrar komjölken är nästan fulla, du behöver fylla flaskor med mjölk och lagra den innan den blir dålig. Detta kan vara en lite knepig uppgift med vanliga metoder och mängden mjölk du kan utvinna kan variera något. Tack och lov kan du använda generatorer för att göra denna process smidig och enkel.

Det finns två (2) tankar med mjölk som behöver pumpas och buteljeras. Varje maskin har fack som lagrar mjölk, dessa representeras av listkonstanterna med namnen: tank_a och tank_b. Dessutom tenderar varje tank att ha ett överskott som du kan samla in.

Generatorer följer samma syntax som funktioner men använder yield istället för return för sin output. Skapa en generator med namnet fill() och ge den argumentet list, detta är platsen där du matar in konstanterna som nämns i föregående stycke.

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

Generatorn läser av data från de tre (3) fälten i listkonstanterna, som representeras av maskinens fack, och lägger till ett överskottsvärde i slutet, vilket är fem (5).

Samla korgobjektet i fältet för att få tillgång till de flaskor som krävs för att fylla på, och gå till de två (2) X-markeringarna för att samla in mjölken med hjälp av en for-loop.

Tack vare yield-satsen kan värdena som produceras av generatorn läsas direkt från en for-loop. Skapa en sådan som använder collect()-funktionen för att hämta "milk" från maskinen. Fortsätt med att använda speak() för att kontrollera hur mycket mjölk varje flaska har lagrat. Till exempel:

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

Skriv och använd denna for-loop på båda X-markeringarna, på den ljusa X-markeringen använd argumentet tank_a och på den mörka X-markeringen använd argumentet tank_b för att slutföra nivån.

Kodbok