Coding for KidsCoding for Kids
Kreativní ÚrovněVýzvyPrůvodce pro Učitele
Hlasovat pro funkce
Pokročilý kurz vývoje v Pythonu
Kapitola
>
Úroveň

Zpracování výjimek
Jinak

Cíl

Vezměte materiály určené na opravu a setřiďte je, poté odstraňte nežádoucí odpad pomocí klauzule else s ošetřením výjimek.

Některé materiály na opravu byly uloženy na vrcholu budovy; používají se k opravě střechy po bouřích nebo při běžném opotřebení. Některé byly nedávno dodány a jsou stále uloženy v obalech a kontejnerech, zatímco jiné jsou uloženy velmi dlouho a byly zamíchány se šrotem. Bylo by dobré materiály setřídit, správně uskladnit a odložit smíchaný šrot a odpad.

Vzhledem k chaotické povaze neuspořádaných materiálů můžete očekávat chyby. Tuto situaci můžete řešit pomocí bloku kódu try / except, nicméně to může být trochu náročné, pokud neznáte, jaké chyby by se mohly objevit. Můžete však rozšířit své nástroje pro ošetření výjimek přidáním klauzule else. Tato klauzule vám umožní spustit kód, pokud se blok except nespustí, což pomáhá zefektivnit váš kód a je vhodné při identifikaci a odstraňování chyb.

Na začátku byste měli vstoupit do levého skladu a zamířit ke světlé značce X. Tento sklad uchovává šindele, které se používají k opravě střešních tašek. Použijte funkci collect() k vyzvednutí konstanty seznamu s názvem shingles.

Seznam pravděpodobně obsahuje několik nežádoucích materiálů, které je potřeba odstranit, navíc jsou uložené v šesti (6) různých odděleních, z nichž každé obsahuje své množství materiálu. Všechny materiály musíte sloučit do jedné hromady. Vytvořte proměnnou s názvem red_storage pro uložení všech materiálů a seznam s názvem junk, do kterého vložíte všechny odpadní materiály.

Obvykle byste materiály jednoduše identifikovali, převedli je na celá čísla pomocí int() a uložili je do proměnné, abyste je mohli odložit. Ale jak můžete očekávat, s ohledem na předchozí úrovně v kapitole a téma tohoto cvičení, dojde k chybě.

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

To bohužel způsobí chybu ValueError, protože některé položky v seznamu se nezdají být čísly. Abyste to napravili, můžete použít bloky kódu try / except a else a setřídit materiály. Použitím bloku else efektivně proměníte blok except v filtr, který odstraní nežádoucí prvky ze seznamu, zatímco blok else zachytí a převede správné prvky seznamu do vytvořené proměnné.

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

Tímto způsobem má proměnná red_storage nyní všechny použitelné šindele, zatímco všechen odpad byl přidán do seznamu junk. Přejděte k zlaté značce X v levém skladu, ve kterém se právě nacházíte, a použijte funkci write(), abyste zaznamenali počet šindelů určených k uskladnění, například takto: await player.write("There are %s shingles ready for use in storage" % (red_storage))

Poté přejděte k tmavé značce X přes červený koberec a použijte funkci place() k uložení proměnné red_storage do bedny.

Jakmile tento úkol dokončíte, zamiřte do pravého skladu, kde se uchovávají dřevěné desky a materiály potřebné k opravě střech a stěn. Namíříte k tmavé značce X přes zelený koberec a použijete funkci collect() k vyzvednutí konstanty seznamu s názvem planks_set z bedny, tento seznam obsahuje desky, ze kterých byl již odstraněn odpad. Poté přejděte ke světlé značce X vedle ní a znovu použijte funkci collect() k vyzvednutí další konstanty seznamu s názvem shipment, což jsou desky, které byly nedávno dodány a stále obsahují nějaký odpad.

Stejně jako v předchozím skladu, seznam shipment pravděpodobně obsahuje několik nežádoucích materiálů, které je třeba odstranit. Stejně jako předtím jsou uloženy v šesti (6) různých odděleních, z nichž každé obsahuje své množství materiálu. Vytvořte proměnnou s názvem blue_storage pro uložení všech materiálů, abyste je mohli sloučit do jedné hromady. Stejně jako dříve budou odpadní materiály ukládány do seznamu junk.

U desek převedeme a sečteme všechny použitelné materiály ze seznamu shipment a přidáme je do seznamu planks_set, poté je všechny sloučíme pomocí int() v proměnné blue_storage. Avšak stejně jako dříve lze očekávat chyby.

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

Tentokrát můžete očekávat chybu TypeError, což nastane, když se pokusíte sčítat čísla a řetězce. To lze opět vyřešit použitím bloků kódu try / except a else: try sčítá hodnoty, blok except filtruje odpad ze seznamu a klauzule else přidává desky do proměnné 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])

Nyní, když je proměnná blue_storage naplněna, můžete zdokumentovat a uložit všechny dřevěné desky. Přejděte k zlaté značce X v pravém skladu, postavte se čelem ke stolu a použijte funkci write(), abyste spočítali materiály, které jste sloučili, například takto: await player.write("There are %s planks ready for use in storage" % (blue_storage))

Pro dokončení úrovně přejděte k tmavé značce X na modrém koberci a použijte funkci place() k uložení proměnné blue_storage do bedny. Poté přejděte k tmavé značce X na fialovém koberci ve středním sále a použijte funkci place() k odložení seznamu junk do odpadkového kanálu, čímž tím splníte svůj úkol.

Kniha Kódu