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

Unntakshåndtering
Ellers-del

Mål

Ta reparasjonsmaterialer og sorter dem, og kast deretter uønsket avfall ved hjelp av «else»-setningen med unntakshåndtering.

Noen reparasjonsmaterialer har blitt lagret på toppen av bygningen. Disse benyttes til å reparere taket etter stormer eller alminnelig slitasje. Noen ble nylig levert og er fortsatt oppbevart i innpakninger og containere, mens andre har vært lagret veldig lenge og ble kastet inn med søppel. Det kan være en god idé å sortere materialene, lagre dem riktig og kvitte seg med skrot og avfall.

På grunn av de uorganiserte materialene kan det forventes feil. Du kan håndtere dette med try / except-kodeblokken, men det kan være litt utfordrende hvis du ikke er kjent med hvilke typer feil du kan støte på. Du kan imidlertid utvide dine unntakshåndteringsverktøy ved å legge til else-setningen. Dette lar deg kjøre kode dersom except-blokken ikke blir kjørt, noe som gir en strømlinjeformet kode og egner seg godt til å identifisere og rydde opp i feil.

For å starte bør du gå inn i det venstre lagringsrommet og gå mot det lyse X-merket. Dette rommet lagrer takstein som brukes til å reparere taktekkingen. Bruk collect()-funksjonen for å hente opp listekonstanten med navnet shingles.

Listen inneholder sannsynligvis flere skrotmaterialer som må fjernes, i tillegg til at de er lagret i seks (6) forskjellige rom, hver med sin egen mengde materialer. Du må samle alle materialene i en enkelt haug. Opprett en variabel med navnet red_storage for å lagre alle materialene og en liste med navnet junk slik at du kan plassere alt avfallsmateriale.

Normalt ville du bare identifisert materialene, konvertert dem til heltall med int() og lagret dem i en variabel for å kunne sette dem bort. Men slik du kanskje forventer, gitt de forrige nivåene i kapitlet og temaet for denne øvelsen, vil en feil sannsynligvis oppstå.

for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])

Dette vil dessverre skape en Value Error, ettersom noen av elementene i listen ser ut til ikke å være tall. For å løse dette kan du bruke try / except og else-kodeblokkene for å sortere materialene. Ved å bruke else-blokken omdanner vi effektivt except-blokken til et filter som fjerner uønskede elementer i listen, mens else-blokken fanger opp og overfører de gode elementene fra listen til variabelen vi opprettet.

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])

Med dette har variabelen red_storage nå alle de brukbare taksteinene, mens alt søppelet har blitt lagt til i listen junk. Gå til det gylne X-merket i det venstre lagringsrommet du er i, og bruk write()-funksjonen for å notere antall takstein for lagring, slik: await player.write("There are %s shingles ready for use in storage" % (red_storage)) Etterpå går du til det mørke X-merket over den røde løperen og bruker place()-funksjonen for å lagre variabelen red_storage i kassen.

Når denne oppgaven er fullført, går du til det høyre lagringsrommet. Dette rommet lagrer treplanker og materialer som trengs for å reparere tak- og veggstrukturer. Gå mot det mørke X-merket over den grønne løperen og bruk collect()-funksjonen for å hente en listekonstant med navnet planks_set fra kassen. Denne listen inneholder planker som allerede er renset for eventuelt avfall. Gå til det lyse X-merket ved siden av og bruk collect()-funksjonen igjen for å hente en annen listekonstant med navnet shipment. Dette er plankematerialer som nylig ble sendt og fremdeles inneholder noe avfall.

Akkurat som i det forrige rommet, inneholder shipment-listen sannsynligvis flere skrotmaterialer som må fjernes. Akkurat som før er de lagret i seks (6) forskjellige rom, hver med sin egen mengde materialer. Opprett en variabel med navnet blue_storage for å lagre alle materialene slik at du kan samle dem i en enkelt haug. Som før vil avfallsmaterialer bli plassert i junk-listen.

For plankene skal vi konvertere og legge til alle de nyttige materialene i shipment-listen og legge dem til i planks_set-listen, for deretter å samle dem, ved hjelp av int(), i variabelen blue_storage. Men akkurat som før, må du forvente feil.

for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])

Denne gangen kan du forvente en Type Error, som oppstår når du prøver å legge sammen tall og strenger. Dette kan håndteres ved å igjen bruke try / except og else-kodeblokkene; try legger sammen listene, except-blokken filtrerer bort skrotet fra listen, og else-setningen legger til plankene i blue_storage.

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])

Nå som variabelen blue_storage er fylt, kan du dokumentere og lagre alle treplankene. Gå til det gylne X-merket i det høyre lagringsrommet du er i, vend deg mot bordet og bruk write()-funksjonen for å telle opp materialene du har samlet, slik: await player.write("There are %s planks ready for use in storage" % (blue_storage))

For å fullføre nivået, gå til det mørke X-merket på den blå løperen og bruk place()-funksjonen for å lagre variabelen blue_storage i kassen. Gå deretter til det mørke X-merket over den lilla løperen i midtsalen og bruk place()-funksjonen for å kaste junk-listen i søppelkassen, og dermed fullføre oppgaven.

Kodebok