Coding for KidsCoding for Kids
Kreative NiveauerUdfordringerLærervejledning
Stem på funktioner
Avanceret Python Udviklingskursus
Kapitel
>
Niveau

Undtagelseshåndtering
Else-sætning

Mål

Tag reparationsmaterialer og sorter dem, og kassér derefter uønsket affald ved at bruge en else-sætning med undtagelseshåndtering.

Nogle reparationsmaterialer er blevet opbevaret i toppen af bygningen, og de bruges til at reparere taget efter storme eller almindelig slitage. Nogle blev for nylig leveret og er stadig opbevaret i indpakninger og beholdere, mens andre har været opbevaret i lang tid og er blevet smidt sammen med skrammel. Det ville være en god idé at sortere materialerne, opbevare dem korrekt og kassere skrammel og affald.

På grund af de uorganiserede materialers natur kan du forvente fejl. Du kan håndtere dette med try / except kodeblokken, men det kan være lidt tricky, hvis du ikke er bekendt med, hvilke fejl du kan støde på. Du kan dog udvide dine undtagelseshåndteringsværktøjer ved at tilføje else-sætningen. Dette gør det muligt at køre kode, hvis except-blokken ikke udføres, hvilket hjælper med at strømline din kode og er velegnet til at identificere og rydde op i fejl.

For at komme i gang skal du gå ind i det venstre opbevaringsrum og bevæge dig mod den lyse X-mærkning. Dette rum opbevarer tagsten, der bruges til at reparere tagfliserne. Brug funktionen collect() til at hente listekonstanten med navnet shingles.

Listen indeholder sandsynligvis flere uønskede materialer blandet ind, og desuden er de opbevaret i seks (6) forskellige rum, hver med deres eget antal materialer. Du skal have alle materialerne samlet i en enkelt bunke. Opret en variabel med navnet red_storage til at opbevare alle materialerne og en liste med navnet junk, så du kan placere alt affaldsmateriale.

Normalt vil du blot identificere materialerne, konvertere dem til heltal med int() og gemme dem i en variabel, så du kan lægge dem væk. Men som du sandsynligvis kan forvente, givet de tidligere niveauer i kapitlet og emnet for denne øvelse, vil en fejl opstå.

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

Dette vil desværre skabe en ValueError, da nogle af elementerne i listen ikke ser ud til at være tal. For at afhjælpe dette kan du bruge try / except og else kodeblokke til at sortere materialerne. Ved at bruge else-blokken transformer vi effektivt except-blokken til et filter, der fjerner uønskede elementer fra listen, mens else-blokken fanger og overfører de gode elementer fra listen til den variabel, vi oprettede.

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 variablen red_storage nu alle brugbare tagsten, mens alt skrald er blevet tilføjet til listen junk. Gå til den guldmærkede X i det venstre opbevaringsrum, hvor du befinder dig, og brug funktionen write() til at notere antallet af tagsten til opbevaring, som i følgende eksempel: await player.write("There are %s shingles ready for use in storage" % (red_storage)). Herefter går du til den mørke X-mærkning over det røde tæppe og bruger funktionen place() til at opbevare variablen red_storage i kassen.

Når denne opgave er udført, skal du gå til det højre opbevaringsrum, som opbevarer træbrædder og materialer, der er nødvendige for at reparere tag- og vægstrukturer. Gå mod den mørke X-mærkning over det grønne tæppe og brug funktionen collect() til at hente en listekonstant med navnet planks_set fra kassen; denne liste indeholder brædder, der allerede er renset for alt affald. Gå herefter til den lyse X-mærkning ved siden af og brug funktionen collect() igen til at hente en anden listekonstant med navnet shipment. Dette er brædder, der for nylig er blevet sendt og stadig indeholder noget affald.

Ligesom i det forrige rum indeholder shipment-listen sandsynligvis flere uønskede materialer, der skal fjernes. Ligesom før er de opbevaret i seks (6) forskellige rum, hver med deres eget antal materialer. Opret en variabel med navnet blue_storage til at opbevare alle materialerne, så du kan samle dem i en enkelt bunke. Ligesom før vil affaldsmaterialer blive deponeret i listen junk.

For brædderne skal vi konvertere og tilføje alle de brugbare materialer fra shipment-listen og lægge dem til planks_set-listen, for derefter at samle dem alle ved hjælp af int() i variablen blue_storage. Men som før kan du forvente fejl.

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

Denne gang kan du forvente en TypeError, som opstår, når du forsøger at lægge tal og strenge sammen. Dette kan håndteres ved igen at bruge try / except og else kodeblokke, hvor try-blokken lægger listerne sammen, except-blokken filtrerer skraldet ud af listen, og else-sætningen tilføjer brædderne til 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])

Nu hvor variablen blue_storage er fyldt, kan du dokumentere og opbevare alle træbrædderne. Gå til den guldmærkede X i det højre opbevaringsrum, vend mod bordet, og brug funktionen write() til at tælle de materialer, du har samlet, som i følgende eksempel: await player.write("There are %s planks ready for use in storage" % (blue_storage))

For at afslutte niveauet skal du gå til den mørke X-mærkning på det blå tæppe og bruge funktionen place() til at opbevare variablen blue_storage i kassen. Gå derefter til den mørke X-mærkning over det lilla tæppe i midterkammeret og brug funktionen place() til at smide listen junk i affaldschuten, og dermed fuldføre din opgave.

Kodebog