Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Generátorok
Egy Generátor Létrehozása
Néha előfordulhat, hogy következetesen szeretne értékeket generálni, nem csak egy egyszeri kimenetet. Hasonlóan a függvények működéséhez, a generátorok is ugyanúgy vannak írva és végrehajtva, kivéve, hogy kimenet előállításakor yield()-et használnak return() helyett.
Ebben a gyakorlatban meg kell töltenie üvegeket tejjel az istálló tartályaiból. Használjon generátort az üvegek feltöltéséhez, és gondoskodjon arról, hogy a felesleges tejet összegyűjtse a tartályokból.

Célkitűzés
Töltsd fel az üvegeket tejjel úgy, hogy a tejet tartályokból pumpálod generátorok segítségével.
A gépek, amelyek tárolják a tehéntejet, majdnem tele vannak, így a tejet üvegbe kell töltened és tárolnod, mielőtt megromlik. Ez egy kicsit bonyolult feladat lehet a hagyományos módszerekkel, és a kipumpálható tej mennyisége változhat. Szerencsére generátorokat használhatsz, hogy ezt a folyamatot simává és egyszerűvé tedd.
Két (2) tejtartály van, amelyekből a tejet ki kell pumpálni és üvegezni kell. Mindegyik gépnek vannak rekeszei, amelyek tárolják a tejet, ezeket az állandó lista nevű: tank_a és tank_b . Ráadásul minden tartálynak hajlamos maradékot hagyni, amit összegyűjthetsz.
A generátorok ugyanazt a szintaxist követik, mint a függvények, de kimenetként yield-et használnak return helyett. Állíts be egy fill() nevű generátort, és állítsd be a list argumentummal, ezt a konstansok bemenetéhez fogod használni, amelyek a fenti bekezdésben vannak említve.
def fill(list):
for x in range(3):
yield list[x]
yield 5
A generátor beolvassa az adatokat a három (3) mezőből a listaállandókban, amelyeket a gép rekeszei képviselnek, és hozzáad egy maradékot a végén, amely öt (5).
Gyűjtsd össze a kosár objektumot a mezőn, hogy hozzáférj a szükséges üvegekhez, és menj a két (2) X jelhez, hogy összegyűjtsd a tejet egy for ciklus használatával.
A yield utasításnak köszönhetően a generátorból származó értékeket közvetlenül egy for ciklusból is beolvashatod. Állíts be egyet, amely a collect() függvényt használja, hogy megszerezze a "tejet" a gépből. Ezt kövesd a speak() használatával, hogy ellenőrizd, mennyi tejet tárolt egy üveg. Például:
for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))
Írd és használd ezt a for ciklust mindkét X jelnél, a világos X jelnél használd a tank_a argumentumot, a sötét X jelnél pedig a tank_b argumentumot annak érdekében, hogy befejezd a szintet.