Coding for KidsCoding for Kids
Luovat TasotHaasteetOpettajan Opas
Äänestä ominaisuuksia
Edistynyt Python-kehityskurssi
Luku
>
Taso

Generaattorit
Generatorin manuaalinen edistäminen

Tavoite

Käytä generaattoria manuaalisessa sekvenssissä kootaaksesi ja tuottaaksesi materiaaleja leivän valmistamiseksi.

Edessä on laitos, jossa voit koota leipätaikinan käyttäen pressiä. Normaalisti käyttäisit funktiota combine() kokoamaan materiaaleja, mutta tässä ei ole kyse näin, vaan materiaalit on jalostettava ensin ennen niiden yhdistämistä.

Tätä tehtävää varten voimme käyttää generaattoreita, sillä niitä voi räätälöidä tuottamaan eri tiedostotyyppejä ja niiden sekvenssi voidaan kutsua komennolla sen sijaan, että ne tuottaisivat tuloksen automaattisesti kuten funktiot ja silmukat. Tässä on esimerkki:

def bread(): yield 5 yield "grain"

Yllä olevassa koodissa on generaattori, jossa on kaksi yield-lausetta, joista toinen tuottaa reaaliluvun ja toinen merkkijonon. Voimme tuottaa generaattorin arvot halutessamme käyttämällä next()-funktiota. Näin:

recipe = bread() # Asettaa generaattorin player.place(next(recipe)) # Kutsutaan ensimmäinen arvo player.collect(next(recipe)) # Kutsutaan toinen arvo

Yllä olevassa esimerkissä generaattori alustetaan ja next()-funktiota käytetään generaattorin kanssa kutsumaan ensimmäinen yield-arvo käytettäväksi place()-funktiossa. Tätä toistetaan toiselle arvolle, mutta sitä käytetään collect()-funktiossa. Tämä helpottaa erilaisten arvojen kutsumista sekvenssissä ilman, että tarvitsee käyttää useita listoja tai muuttujia.

Koodieditorissa määritellään generaattori nimeltä bread(), mutta se tarvitsee määrälukuja kullekin ainesosalle, jotta voit jalostaa leipätaikinan. Nämä luvut ovat kirjoitettu merkkiin laitoksen vieressä. Alusta generaattori käyttämällä viittausta siihen, näin: recipe = bread()

Ensiksi kävele vaalean X-merkin luokse maidon säiliön vieressä ja collect() viimeinen maitoa säiliöstä käyttäen generaattorin next()-funktiota, näin: player.collect(next(recipe)). Seuraavaksi kävele kultaisen X-merkin luokse merkin vieressä ja käytä speak()-funktiota saadaksesi määrälukemat, jotka tarvitaan generaattorille leivän tuottamiseksi, ja kirjoita ne generaattoriin. Tiedot on tallennettu vakioon nimeltä "sign" ja niitä kutsutaan näin: player.speak(sign).

Kun kaikki arvot on syötetty generaattoriin, mene laitokseen ja käytä player.place(next(recipe)) tummilla X-merkeillä ja player.collect(next(recipe)) vaaleilla X-merkeillä suorittaaksesi tason loppuun.

Koodikirja