Avansert Python-utviklingskurs
Noen ganger kan det være ønskelig å generere verdier konsekvent i stedet for en engangsutdata. På samme måte som funksjoner fungerer, skrives og utføres generatorer på samme måte bortsett fra at de bruker yield() i stedet for return() når de produserer en utdata.
I denne oppgaven må du fylle flasker med melk fra tankene i stallen. Bruk en generator for å iterere fylling av flaskene og sørg for at overflødig melk samles fra tankene.

Mål
Fyll flasker med melk ved å pumpe melketankene ved hjelp av generatorer.
Maskinene som lagrer kumelk er nesten fulle, du må flaske melken og lagre den før den blir dårlig. Dette kan være litt av en utfordring med vanlige metoder, og mengden melk du kan trekke ut kan variere litt. Heldigvis kan du bruke generatorer for å gjøre denne prosessen sømløs og enkel.
Det er to (2) tanker med melk som trenger å få pumpet og flaskefylt melken. Hver maskin har rom som lagrer melk, disse er representert ved listekonstanter kalt: tank_a og tank_b. I tillegg har hver tank normalt et overskudd som du kan samle opp.
Generatorer følger samme syntaks som funksjoner, men vil bruke yield i stedet for return for utdataene sine. Sett opp en generator kalt fill() og angi den med argumentet list, dette ville være hvor du angir konstantene nevnt i avsnittet ovenfor.
def fill(list):
for x in range(3):
yield list[x]
yield 5
Generatoren leser data fra de tre (3) feltene i listekonstantene, representert ved rommene i maskinen, og legger til et overskudd på slutten som er fem (5).
Samle opp kurvobjektet i feltet for å få tilgang til flaskene som er nødvendige for fylling, og gå til de to (2) X-merkene for å samle opp melken ved hjelp av en for-løkke.
Takket være yield-utsagnet kan verdiene som produseres fra generatoren leses direkte fra en for-løkke også. Sett opp en som bruker collect()-funksjonen for å hente "melk" fra maskinen. Følg opp med å bruke speak() for å sjekke hvor mye melk hver flaske har lagret. For eksempel:
for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))
Skriv og bruk denne for-løkken på begge X-merkene, på det lyse X-merket bruker du argumentet tank_a og på det mørke X-merket bruker du argumentet tank_b for å fullføre nivået.