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

Generaattorit
Generaattorin luominen

Joskus saatat haluta generoida arvoja jatkuvasti sen sijaan, että saisit kertaluonteisen tulosteen. Aivan kuten funktiot toimivat, generaattorit kirjoitetaan ja suoritetaan samalla tavalla, paitsi että ne käyttävät yield()-funktiota return()-funktion sijaan, kun ne tuottavat ulostulon.

Tässä harjoituksessa sinun täytyy täyttää pulloja maidolla tallin säiliöistä. Käytä generaattoria iteroidaksesi pullojen täyttämistä ja varmistaaksesi, että ylimääräinen maito kerätään säiliöistä.

Guide

Tavoite

Täytä pullot maidolla pumpaten maitotankkeja generaattoreilla.

Lehmänmaitoa varastoivat koneet ovat melkein täynnä, joten maidon pullottaminen ja säilyttäminen ennen sen pilaantumista on tarpeen. Tämä voi olla hieman hankalaa tavallisilla keinoilla, ja uutettavissa olevan maidon määrä voi vaihdella. Onneksi voit käyttää generaattoreita tehdäksesi prosessista sujuvan ja yksinkertaisen.

Maitoa on kahdessa (2) tankissa, joista maito on pumpattava ja pullotettava. Jokaisessa koneessa on osastoja, joissa maitoa säilytetään; nämä esitetään listavakioina nimeltä: tank_a ja tank_b. Lisäksi jokaisessa tankissa on yleensä keräilyyn jätetty ylimääräistä.

Generaattorit noudattavat samaa syntaksia kuin funktiot, mutta käyttävät yield-lausetta return-lausetta sijaan tuotonaan. Määrittele generaattori nimeltä fill() ja aseta se argumentilla list, johon syötetään yllä mainitut vakioarvot.

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

Generaattori lukee tiedot listavakioiden kolmesta (3) kentästä, jotka vastaavat koneen osastoja, ja lisää lopussa ylimääräisen arvon, joka on viisi (5).

Kerää kentältä kori-objekti saadaksesi pullot käyttöösi täyttämistä varten ja kävele kahden (2) X-merkin luokse kerätäksesi maitoa käyttäen for-silmukkaa.

yield-lauseen ansiosta generaattorin tuottamat arvot voidaan lukea suoraan for-silmukasta. Määrittele sellainen silmukka, joka käyttää funktiota collect() saadakseen koneesta "milk". Seuraa tätä käyttämällä speak()-funktiota tarkistaaksesi, kuinka paljon maitoa kukin pullo sisältää. Esimerkiksi:

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

Kirjoita ja käytä tätä for-silmukkaa molemmissa X-merkeissä: vaaleassa X-merkissä käytä argumenttina tank_a ja tummassa X-merkissä tank_b tasoittaaksesi tason.

Koodikirja