Coding for KidsCoding for Kids
Creatieve LevelsUitdagingenLerarengids
Stem op functies
Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

Foutafhandeling
Else-clausule

Doelstelling

Neem reparatiematerialen en sorteer ze, gooi dan ongewenst afval weg door gebruik te maken van de else clause met exception handling.

Sommige reparatiematerialen zijn bovenaan het gebouw opgeslagen; deze worden gebruikt voor het repareren van het dak na stormen of na algemene slijtage. Sommige materialen zijn recent geleverd en zijn nog verpakt in folies en containers, terwijl andere al heel lang zijn opgeslagen en samen met het afval zijn weggegooid. Het is een goed idee om de materialen te sorteren, ze op de juiste manier op te slaan en het afval weg te gooien.

Vanwege de aard van de rommelige materialen kun je waarschijnlijk fouten verwachten. Je kunt dit aanpakken met het try / except codeblok, maar het kan een beetje lastig zijn als je niet bekend bent met welke fouten je kunt tegenkomen. Je kunt echter je exception-handling uitbreiden door de else clause toe te voegen. Dit maakt het mogelijk om code uit te voeren als het except-blok niet wordt uitgevoerd, waardoor je code wordt gestroomlijnd en het uitstekend geschikt is om fouten te identificeren en op te ruimen.

Om te beginnen moet je de linker opslagruimte binnengaan en naar het lichte X-merkteken lopen. In deze kamer worden shingles opgeslagen die gebruikt worden om de dakpannen te repareren. Gebruik de collect() functie om de lijstconstante met de naam shingles op te pakken.

De lijst bevat waarschijnlijk verschillende afvalmaterialen die verwijderd moeten worden, bovendien zijn ze opgeslagen in zes (6) verschillende compartimenten, elk met hun eigen hoeveelheid materialen. Je moet alle materialen samenvoegen tot één stapel. Maak een variabele genaamd red_storage om alle materialen op te slaan en een lijst genaamd junk waarin je al het afval kunt plaatsen.

Normaal gesproken zou je de materialen eerst identificeren, ze converteren naar gehele getallen met int() en ze in een variabele opslaan zodat je ze kunt opbergen. Maar zoals je waarschijnlijk kunt verwachten, gezien de eerdere levels in dit hoofdstuk en het onderwerp van deze oefening, zal er een fout optreden.

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

Dit zal helaas een Value Error veroorzaken, omdat sommige items in de lijst geen getallen lijken te zijn. Om dit op te lossen kun je de try / except en else codeblokken gebruiken om de materialen te sorteren. Door de else block te gebruiken, transformeren we effectief het except blok in een filter dat ongewenste elementen uit de lijst verwijdert, terwijl het else blok de goede elementen van de lijst opvangt en overdraagt aan de variabele die we hebben aangemaakt.

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

Hiermee bevat de variabele red_storage nu alle bruikbare shingles, terwijl al het afval is toegevoegd aan de junk lijst. Loop naar het gouden X-merkteken in de linker opslagruimte waarin je je bevindt, en gebruik de write() functie om het aantal shingles voor opslag te noteren, bijvoorbeeld: await player.write("There are %s shingles ready for use in storage" % (red_storage)). Loop daarna naar het donkere X-merkteken op het rode tapijt en gebruik de place() functie om de red_storage variabele in de krat op te slaan.

Zodra deze taak voltooid is, ga je naar de rechter opslagruimte. In deze kamer worden houten planken en materialen opgeslagen die nodig zijn voor het repareren van dak- en muurbouwstructuren. Ga naar het donkere X-merkteken op het groene tapijt en gebruik de collect() functie om een lijstconstante met de naam planks_set uit de krat te pakken; deze lijst bevat planken die al van afval zijn ontdaan. Loop vervolgens naar het lichte X-merkteken ernaast en gebruik opnieuw de collect() functie om een andere lijstconstante met de naam shipment op te halen. Dit zijn plankmaterialen die recentelijk zijn verzonden en nog wat afval bevatten.

Net als in de vorige kamer bevat de shipment lijst waarschijnlijk verschillende afvalmaterialen die verwijderd moeten worden. Ook deze zijn opgeslagen in zes (6) verschillende compartimenten, elk met hun eigen hoeveelheid materialen. Maak een variabele genaamd blue_storage om alle materialen op te slaan zodat je ze samen kunt voegen tot één stapel. Net als voorheen worden de afvalmaterialen in de junk lijst geplaatst.

Voor de planken gaan we alle bruikbare materialen in de shipment lijst converteren en toevoegen aan de planks_set lijst, waarna we ze allemaal samenvoegen, met behulp van int(), in de blue_storage variabele. Maar ook hier moet je, net als voorheen, op fouten letten.

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

Deze keer kun je een Type Error verwachten; dit gebeurt wanneer je probeert getallen en strings samen te voegen. Dit kan weer worden opgelost door het gebruik van de try / except en else codeblokken. De try voegt de lijsten samen, het except blok filtert het afval uit de lijst en de else clause voegt de planken toe aan de 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 de blue_storage variabele gevuld is, kun je alle houten planken documenteren en opbergen. Loop naar het gouden X-merkteken in de rechter opslagruimte waarin je je bevindt, richt je naar de tafel en gebruik de write() functie om de materialen die je hebt samengevoegd te tellen, bijvoorbeeld: await player.write("There are %s planks ready for use in storage" % (blue_storage))

Om het niveau af te ronden, loop je naar het donkere X-merkteken op het blauwe tapijt en gebruik je de place() functie om de blue_storage variabele in de krat op te slaan. Loop daarna naar het donkere X-merkteken op het paarse tapijt in de middenkamer en gebruik de place() functie om de junk lijst in de vuilnisbak te deponeren, waarmee je je taak voltooit.

Codeboek