Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå
Undantagshantering
Annars-sats
Mål
Ta reparationsmaterial och sortera dem, och kassera oönskat avfall genom att använda else-satsen med undantagshantering.
Vissa reparationsmaterial har lagrats högst upp på byggnaden, de används för att reparera taket efter stormar eller allmänt slitage. Vissa levererades nyligen och är fortfarande förvarade i omslag och behållare, andra har lagrats mycket länge och kastades ihop med skräp. Det vore en bra idé att sortera materialet och lagra det ordentligt samt kassera skräpet och avfallet.
På grund av den oorganiserade naturen hos materialen kan du med största sannolikhet förvänta dig fel. Detta kan du hantera med try / except kodblocket, men det kan vara lite knepigt om du inte är bekant med vilka fel du kan stöta på. Men du kan utöka dina verktyg för undantagshantering genom att lägga till else-satsen. Detta gör att du kan köra kod om except-blocket inte körs, vilket effektiviserar din kod och är väl lämpat när du identifierar och åtgärdar fel.
För att komma igång bör du gå in i vänstra förrådet och gå mot det ljusa X-märket. Detta rum förvarar takpappor som används för att reparera takpannorna. Använd funktionen collect() för att plocka upp listkonstanten med namnet shingles.
Listan innehåller troligtvis flera skräpmaterial blandat som måste tas bort, dessutom är de förvarade i sex (6) olika fack, var och en med sin egen mängd material. Du behöver få ihop allt material i en enda hög. Skapa en variabel med namnet red_storage för att lagra allt material samt en lista med namnet junk så att du kan lägga dit allt avfallsmaterial.
Normalt sett skulle du bara identifiera materialen, konvertera dem till heltal med int() och lagra dem i en variabel så att du kan lägga undan dem. Men som du förmodligen kan förvänta dig, med tanke på de tidigare nivåerna i kapitlet och ämnet för denna övning, är ett fel oundvikligt att inträffa.
for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])
Detta kommer tyvärr att skapa ett Value Error, eftersom några av objekten i listan inte verkar vara siffror. För att åtgärda detta kan du använda try / except och else kodblock och sortera materialen. Genom att använda else-blocket omvandlar vi effektivt except-blocket till ett filter som tar bort oönskade element från listan, medan else-blocket fångar och överför de goda elementen i listan till variabeln vi skapade.
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 detta har variabeln red_storage nu alla användbara takpappor, medan allt skräp har lagts i listan junk. Gå till det gyllene X-märket i det vänstra förrådet du befinner dig i, och använd funktionen write() för att skriva ner antalet takpappor för lagring, så här: await player.write("There are %s shingles ready for use in storage" % (red_storage)) Efteråt, gå till det mörka X-märket över den röda mattan och använd funktionen place() för att lagra variabeln red_storage i lådan.
När denna uppgift är klar, bege dig till det högra förrådet. Detta rum förvarar träbjälkar och material som behövs för att reparera tak- och väggstrukturer. Gå mot det mörka X-märket över den gröna mattan och använd funktionen collect() för att hämta listkonstanten med namnet planks_set från lådan, denna lista innehåller bjälkar som redan har rensats från allt avfall. Gå sedan till det ljusa X-märket intill och använd funktionen collect() igen för att hämta ytterligare en listkonstant med namnet shipment, dessa är bjälkmaterial som nyligen har skickats och fortfarande innehåller en del avfall.
Precis som i det föregående rummet innehåller listan shipment troligtvis flera skräpmaterial blandat som måste tas bort. Precis som tidigare är de lagrade i sex (6) olika fack, var och en med sin egen mängd material. Skapa en variabel med namnet blue_storage för att lagra allt material så att du kan samla dem i en enda hög. Liksom tidigare kommer avfallsmaterial att placeras i listan junk.
För bjälkarna ska vi konvertera och lägga till alla användbara material i listan shipment och lägga till dem i listan planks_set, för att sedan samla ihop dem, med hjälp av int(), i variabeln blue_storage. Men precis som tidigare kan fel förväntas.
for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])
Denna gång kan du förvänta dig ett Type Error, vilket är vad som händer när du försöker addera tal och strängar tillsammans. Detta kan åtgärdas genom att återigen använda try / except och else kodblock. try slår ihop listorna, except-blocket filtrerar bort skräpet från listan och else-satsen lägger till bjälkarna 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])
Nu när variabeln blue_storage är fylld kan du dokumentera och lagra alla träbjälkar. Gå till det gyllene X-märket i det högra förrådet du befinner dig i, vänd dig mot bordet och använd funktionen write() för att räkna samman det material du samlat, så här: await player.write("There are %s planks ready for use in storage" % (blue_storage))
För att avsluta nivån, gå till det mörka X-märket på den blå mattan och använd funktionen place() för att lagra variabeln blue_storage i lådan. Gå sedan till det mörka X-märket över den lila mattan i den mellersta kammaren och använd funktionen place() för att kassera listan junk i sopsugen, vilket fullbordar din uppgift.