Coding for KidsCoding for Kids
Kreative NivåerUtfordringerLærerveiledning
Stem på funksjoner
Avansert Pythonutviklingskurs
Kapittel
>
Nivå

Unntakshåndtering
Flere unntak

Målsetning

Samle inn og lagre noen medisinske forsyninger korrekt i kasser ved bruk av flere unntak.

Lagerrommene på taket må fylles opp, noen av forsyningene ble brukt men aldri erstattet. Det er lagt inn en bestilling på flere materialer i en notis i ett av lagerrommene, så det ville vært en god idé å få det ordnet. Det sagt, det er en rekke forskjellige materialer som må settes sammen og lagres i kasser.

På grunn av de forskjellige datatypene og antall materialer som kreves for å fylle kassene, kan vi støte på ulike feil. Vi kan bruke try / except for å fange mulige feil og rette opp noen problemer, men hva skjer når det er flere mulige feil man kan støte på i en enkelt operasjon? For å håndtere dette kan vi spesifisere hvilke unntak vi prøver å fange, og bruke flere unntak.

Til å begynne med, gå til det gullfargede X-merket og vend deg mot døren, bruk open()-funksjonen for å gå inn i lagerrommet. Når du er inne, gå til det mørke X-merket og sving til høyre for å bruke read()-funksjonen og sjekke hvilke materialer og mengder som bestilles i notisen på bordet. Informasjon om listekonstanter er skrevet i notisen, inkludert forsyninger og bestillingene deres. Når du er ferdig, gå til det lyse X-merket inne i lagerrommet, snu deg mot kassen og hent pads-listekonstanten av materialer ved hjelp av collect()-funksjonen, slik: player.collect(pads) .

Inne i lagerrommet finnes lagre med "peroxide" og "isopropyl", gå og samle alle sammen, deretter gå ut og følg til det mørke X-merket over et lilla teppe. På det lilla teppet, mens du vender mot kassen, bruk collect()-funksjonen for å hente "water bottle", gå deretter til det mørke X-merket over det gule teppet og bruk collect()-funksjonen for å hente "glass bottle".

Nå som varene er samlet, er det på tide å oppfylle bestillingen og plassere alle materialene i lagerkassene til høyre. For å gjøre dette skal vi først lagre: "water bottle", "peroxide" og "isopropyl" inne i en liste kalt supplies. På de mørke X-markene over teppene red, green og blue vil vi bruke kassene til å lagre de medisinske forsyningene. Til dette skal vi sette opp tre lister: blue_crate = [], green_crate = [] og red_crate = [].

Før vi plasserer alle varene, må vi fylle alle listene med materialene; for dette skal vi bruke en løkke for å iterere gjennom listene og kombinere dem til én enkelt liste. Dette vil sette alle supplies inn i listen og dele antallet pads-elementer i henhold til order i notisen i lagerrommet.

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

Til tross for dette vil du legge merke til at det dukker opp feil, selv om alt blir gjort riktig og koden er solid. Men her er problemet: supplies-listen har bare tre (3) elementer, men løkken kjører fem (5) ganger og forårsaker en Index Error. I mellomtiden har ikke bare pads-listen også bare tre (3) elementer, men en av bestillingsverdiene er 0; ethvert tall delt på 0 forårsaker en Zero Division Error, fordi intet tall kan deles på 0 i matematikk.

Dette er hvor flere unntak er nyttige; vi bruker try / except-kodeblokkene for å fange feilene og la oss fortsette med koden. Siden det oppstår to feil, må vi identifisere hver enkelt feil for å fange det spesifikke unntaket. Dette gjøres ved å utvide except-kodeblokkene på følgende måte: except IndexError: og except ZeroDivisionError:. For eksempel:

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 rettes ved å fylle inn manglende plasser i listen med "glass bottle", og Zero Division Error håndteres ved å legge til en verdi på 0 dersom den ulovlige handlingen inntreffer.

Gjør dette for listene blue_crate = [], green_crate = [] og red_crate = []. Gå til det mørke X-merket over teppene blue, green og red og bruk place()-funksjonen for å lagre listene i de tilsvarende kassene for å fullføre nivået.

Kodebok