Edistynyt Python-kehityskurssi
Luku
>
Taso
Generaattorit
Lähetetään dataa generaattorille
Tavoite
Kerää villaa ja jatka sen langaksi pyörittämällä spindlöitä, lähettämällä dataa generaattoriin.
Jotkut lampaista ovat hieman liian villaisia, joten olisi parasta leikata ne ja kerätä niiden villa. Sen jälkeen voit laittaa villan spindlin läpi lankaan valmistamiseksi. Saavuttaaksesi tämän meidän täytyy käyttää generaattoria, sillä prosessoitavien lankojen ja villojen määrät voivat vaihdella suuresti.
Määrittele ensin generaattori, joka kykenee pyörittämään lankaa, nimeämällä se spin(). Tämä generaattori täytyy asettaa käyttämään ulkoista syötettä toimiakseen. Se lukee dataa yield-komennosta ja sijoittaa sen muuttujaan, minkä jälkeen se muokkaa sen sisältöä pidentämällä sitä jokaisen kierroksen aikana, lopulta tuottaen tuloksen.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
Koska kyseessä on generaattori, sen sisällä oleva while()-silmukka voidaan keskeyttää ja muokata tuottamaan haluamamme tulos. Tämä ohjaustaso on generaattorin ydin ja osoittaa, miten se voi olla hyödyllinen datan käsittelyssä. Datan syöttämiseksi generaattoriin, määrittele se ja käytä send()-funktiota syöttääksesi sille haluamaasi dataa, esimerkiksi:
spindle = spin() # Luo generaattorin instanssi next(spindle) # Suorita generaattori yksi askel spindle.send(6) # Syötä dataa generaattoriin # Tässä tapauksessa käytät numeroa 6
Kävele valon X-merkkien kohdalle, jotka sijaitsevat värillisten mattojen läheisyydessä, ja kohtaa lampaat. On olemassa sanakirjakonstanssi nimeltä sheep, joka sisältää arvon, kuinka paljon villaa voit leikata kustakin lampaan. Käytä speak()-funktiota yhdessä sanakirjan ja sen maton värin kanssa, jolla seisot, leikataksesi lampaan villaa ja tarkistaaksesi, kuinka paljon olet kerännyt. Esimerkiksi: player.speak(sheep["green"]) .
Yhteensä on neljä (4) värillistä mattoa: "green", "red", "blue" ja "orange". Kun olet leikannut lampaan villan, kävele pimeiden X-merkkien kohdalle kunkin värillisen maton vieressä, missä spindlöitä sijaitsee. Käytä send()-funktiota syöttääksesi generaattoriin leikatun villan määrän (paunoina) kullekin lampaalle niiden vastaavalla värillä.
Esimerkiksi, jos leikkaat lampaan "green"-matolla 4 paunaa villaa, mene spindlöiden kohdalle "green"-matolla ja lähetä kyseinen data generaattoriin, kuten näin:
next(spindle) spindle.send( 4)
Tee näin kaikilla neljällä (4) pimeällä X-merkillä värillisillä matoilla, jotta taso saadaan suoritettua.