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

Poikkeusten käsittely
Useita poikkeuksia

Tavoite

Kerää ja tallenna lääkintävarusteet oikein arkoihin käyttämällä useita poikkeuksia.

Katon varastotilat täytyy täydentää, sillä joitakin varusteita on käytetty, mutta niitä ei ole koskaan korvattu. Yhdessä varastohuoneessa muistiossa on tehty tilaus lisämateriaaleista, joten olisi hyvä hoitaa se kuntoon. Tämän lisäksi on olemassa erilaisia materiaaleja, jotka tulee koota yhteen ja varastoida arkoihin.

Koska arkkujen täyttämiseen tarvitaan erilaisia datatyyppejä ja materiaaleja, saatamme törmätä monenlaisiin virheisiin. Voimme käyttää try / except -rakennetta mahdollista virheiden sieppaamiseen ja joidenkin ongelmien korjaamiseen, mutta mitä tapahtuu, kun yhdessä operaatiossa voi esiintyä useita mahdollisia virheitä? Tätä varten voimme määritellä tarkasti, minkä poikkeuksen yritämme siepata, ja käyttää useita except-lohkoja.

Aloittaaksesi, kävele kultaisen X-merkin luo ja kohtaa ovi. Käytä funktiota open() päästäksesi varastohuoneeseen. Kun olet sisällä, kävele tumman X-merkin luo ja käänny oikealle käyttääksesi read()-funktiota ja tarkistaaksesi, mitä materiaaleja ja määriä muistiossa pöydällä tilataan. Muistiosta löytyy tietoa listakonstanteista, mukaan lukien varusteet ja niiden tilaukset. Kun olet valmis, kävele varastohuoneessa olevan vaalean X-merkin luo, käänny arkun suuntaan ja poimi pads-listakonstantti materiaaleista käyttäen collect()-funktiota, esimerkiksi näin: player.collect(pads) .

Varastohuoneessa on varastoituna "peroxide" ja "isopropyl". Kävele ja kerää ne kaikki, sitten suuntaa ulos ja kävele tumman X-merkin luo yli violetti maton. Violetti matto: kääntäen arkun suuntaan, käytä collect()-funktiota poimiaksesi "water bottle", siirry sitten tumman X-merkin luo keltaisen maton yli ja käytä collect()-funktiota poimiaksesi "glass bottle".

Nyt kun tavarat on kerätty, on aika täyttää tilaus ja sijoittaa kaikki materiaalit varastohuoneen oikealla oleviin arkoihin. Tätä varten tallennamme ensin: "water bottle", "peroxide" ja "isopropyl" listaan nimeltä supplies. Tummilla X-merkeillä punaisen, vihreän ja sinisen maton yli käytämme arkkuja lääkintävarusteiden säilytykseen. Tätä varten määrittelemme kolme listaa: blue_crate = [], green_crate = [] ja red_crate = [].

Ennen kuin asetamme kaikki tavarat, meidän täytyy täyttää listat materiaaleilla. Tätä varten käytämme silmukkaa käymään läpi listat ja yhdistämään ne yhdeksi ainoaksi listaksi. Tämä laittaa kaikki supplies-listan materiaalit yhteen ja jakaa pads-listan tavaroiden määrän muistiossa olevan order-arvon mukaisesti.

for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])

Huolimatta tästä huomaat, että virheitä ilmenee, vaikka kaikki olisi tehty oikein ja koodi olisi kunnossa. Ongelmana on, että supplies-listassa on vain kolme (3) elementtiä, mutta silmukka käy läpi viisi (5) kertaa, mikä aiheuttaa Index Error -virheen. Samaan aikaan pads-listassa on myös vain kolme (3) elementtiä, ja yksi tilausarvoista on 0; mikä tahansa luku jaettuna 0:lla aiheuttaa Zero Division Error -virheen, koska matemaattisesti mitään lukua ei voida jakaa nollalla.

Tässä tilanteessa useat poikkeukset ovat hyödyllisiä. Käytämme try / except -lohkoja virheiden sieppaamiseen, jotta koodi voi edetä. Koska kohdatessamme kaksi eri virhettä, meidän täytyy tunnistaa kumpikin virhe tarkasti, jotta voimme siepata juuri oikean poikkeuksen. Tämä tehdään laajentamalla except-lohkoja seuraavasti: except IndexError: ja except ZeroDivisionError:. Esimerkiksi:

for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)

Index Error -virhe korjataan täyttämällä puuttuvat kohdat listassa arvolla "glass bottle", ja Zero Division Error -virhe käsitellään lisäämällä arvo 0, jos laiton laskutoimitus tapahtuu.

Tee tämä kaikille listoille: blue_crate = [], green_crate = [] ja red_crate = []. Kävele tumman X-merkin luo sinisen, vihreän ja punaisen maton yli ja käytä place()-funktiota tallentaaksesi listat vastaaviin arkoihin, jotta taso saadaan suoritettua.

Koodikirja