Edistynyt Python-kehityskurssi
Luku
>
Taso
Poikkeuskäsittely
muuten-haara
Tavoite
Ota korjausmateriaalit ja lajittele ne, sitten hävität ei-toivotun jätteen käyttämällä else-haaraa poikkeuksenkäsittelyn yhteydessä.
Joitakin korjausmateriaaleja on säilytetty rakennuksen katon päällä, ja niitä käytetään katon korjaamiseen myrskyjen tai yleisen kulumisen jälkeen. Osa materiaaleista on äskettäin toimitettu ja ne on yhä säilytetty kääreissä ja astioissa, kun taas toiset on varastoitu hyvin pitkään ja ne on heitetty sekamellantoon. Olisi hyvä idea lajittää materiaalit, säilyttää ne asianmukaisesti ja hävittää roskat ja jätteet.
Järjestämättömien materiaalien luonteen vuoksi voit odottaa virheitä. Voit käsitellä tätä käyttämällä try / except koodilohkoa, mutta se voi olla hieman hankalaa, jos et ole tuttu mahdollisten virheiden kanssa. Voit kuitenkin laajentaa poikkeuksenkäsittelytyökaluja lisäämällä else-haaran. Tämä mahdollistaa koodin suorittamisen, jos except-lohkoa ei suoriteta, jolloin koodistasi tulee virtaviivaisempaa ja se soveltuu hyvin virheiden tunnistamiseen ja korjaamiseen.
Aloittaaksesi sinun tulisi mennä vasemman puolen varastohuoneeseen ja kävellä valon osoittamaa X-merkkiä kohti. Tämä huone säilyttää kattotiiliä (shingles), joita käytetään kattotiilien korjaamiseen. Käytä collect()-funktiota napataksesi listan vakio nimeltä shingles.
Lista sisältää luultavasti useita sekametallisia materiaaleja, jotka on poistettava, ja ne on lisäksi säilytetty kuudessa (6) eri osastossa, joilla kussakin on oma määränsä materiaaleja. Sinun tulee yhdistää kaikki materiaalit yhdeksi pinoiseksi. Luo muuttuja nimeltä red_storage tallentaaksesi kaikki materiaalit ja lista nimeltä junk, johon voit kerätä kaikki jätteet.
Normaalisti tunnistaisit materiaalit, muuttaisit ne kokonaisluvuiksi käyttämällä int()-funktiota ja tallentaisit ne muuttujaan, jotta voisit laittaa ne säilytykseen. Mutta kuten voit odottaa edellisten lukujen ja tämän harjoituksen aiheen perusteella, virhe on väistämätön.
for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])
Tämä aiheuttaa valitettavasti Value Errorin, sillä osa listan alkioista ei näytä olevan numeroita. Tämän korjaamiseksi voit käyttää try / except ja else koodilohkoja ja lajitella materiaalit. Käyttämällä else-lohkosta muutamme käytännössä except-lohkon suodattimeksi, joka poistaa ei-toivotut alkiot listasta, kun taas else-haara kaappaa ja siirtää listan hyvät alkiot luomaamme muuttujaan.
for x in range(6): try: player.speak(int(shingles[x])) except: player.speak("Item %s is junk" % (x)) junk.append(shingles[x]) else: red_storage+=int(shingles[x])
Tämän jälkeen red_storage-muuttuja sisältää nyt kaikki käyttökelpoiset tiilet, ja kaikki roskat on lisätty junk-listaan. Kävele vasemmassa varastohuoneessa kultaisen X-merkin kohdalle, ja käytä write()-funktiota kirjaamaan ylös tiilien määrä säilytystä varten, esimerkiksi näin: await player.write("There are %s shingles ready for use in storage" % (red_storage)) Sen jälkeen kävele tumman X-merkin kohdalle punaisella matolla ja käytä place()-funktiota tallentaaksesi red_storage-muuttujan arkkuun.
Kun tämä tehtävä on suoritettu, siirry oikeaan varastohuoneeseen; tämä huone säilyttää puupalkkeja ja materiaaleja, joita tarvitaan katon ja seinien korjaamiseen. Suuntaa tumman X-merkin kohdalle vihreällä matolla ja käytä collect()-funktiota napataksesi listan vakio nimeltä planks_set arkusta, tämä lista sisältää palkkeja, joista on jo poistettu jätteet. Kävele sen vieressä olevan vaalean X-merkin kohdalle ja käytä collect()-funktiota uudelleen napataksesi toisen listan vakio nimeltä shipment, nämä ovat palkkimateriaaleja, jotka on äskettäin toimitettu ja joissa on vielä jonkin verran jätettä.
Aivan kuten edellisessä huoneessa, shipment-lista sisältää luultavasti useita sekaisin olevia roskamaisia materiaaleja, jotka täytyy poistaa. Kuten ennenkin, ne on säilytetty kuudessa (6) eri osastossa, joista jokaisessa on oma määränsä materiaaleja. Luo muuttuja nimeltä blue_storage tallentaaksesi kaikki materiaalit, jotta ne voidaan yhdistää yhdeksi pinoiseksi. Kuten aiemmin, jätteenä olevat materiaalit talletetaan junk-listaan.
Palkkien kohdalla aiomme muuntaa ja lisätä kaikki käyttökelpoiset materiaalit shipment-listalta ja lisätä ne planks_set-listaan, minkä jälkeen yhdistämme ne kaikki käyttämällä int()-funktiota blue_storage-muuttujassa. Kuten ennenkin, virheitä on odotettavissa.
for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])
Tällä kertaa voit odottaa Type Erroria, joka esiintyy, kun yrität lisätä lukuja ja merkkijonoja yhteen. Tämän voi korjata käyttämällä jälleen try / except ja else koodilohkoja; try-lohkossa yritetään lisätä listat yhteen, except-haara suodattaa roskat listasta ja else-haara lisää palkit blue_storage-muuttujaan.
for y in range(6): try: planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) except: player.speak( "Item %s is junk. Slot only has %s items" % (y,planks_set[y])) junk.append(shipment[y]) else: blue_storage+=int(planks_set[y])
Nyt kun blue_storage-muuttuja on täytetty, voit dokumentoida ja tallentaa kaikki puupalkit. Kävele oikeassa varastohuoneessa kultaisen X-merkin kohdalta, käänny pöytää kohti ja käytä write()-funktiota laskeaksesi yhteen keräämäsi materiaalit, esimerkiksi näin: await player.write("There are %s planks ready for use in storage" % (blue_storage))
Viimeistelläksesi tason, kävele tumman X-merkin kohdalle sinisellä matolla ja käytä place()-funktiota tallentaaksesi blue_storage-muuttujan arkkuun. Sen jälkeen kävele tumman X-merkin kohdalle violettisella matolla keskikehdassa ja käytä place()-funktiota hävittääksesi junk-listan roskakaitaan, jolloin tehtäväsi on valmis.