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
Zabalení výjimky

Cíl

Jděte do kanceláře a ujistěte se, že peněžní zásoba je správně vyrovnána pomocí kódového bloku finally a klíčového slova assert.

Hluboko v druhém patře je kancelář určená pro uchovávání fondů pro budoucí investice do farmy. Je na čase se přihlásit a ujistit se, že všechny účetní knihy jsou vyrovnané. Při práci s čísly se přirozeně vyskytnou matematické chyby a další problémy, takže opět platí, že využití ošetření výjimek je dobrý nápad pro odchycení a vyřešení chyb.

Kromě kódových bloků try / except a else existuje také kódový blok finally, který vám umožňuje uzavřít výjimku. Navíc, klíčové slovo assert je ladicí nástroj, který umožňuje prověřit, zda kód neobsahuje chyby, a tím vám umožní opravit špatný kód.

Začněte chůzí k lehké značce X před dveřmi kanceláře a použitím funkce open() k otevření dveří a vstupu. Jakmile jste uvnitř, vydejte se ke zlaté značce X a použijte funkci collect() k získání dvou různých konstant pojmenovaných: categories a savings.

Konstanta categories je seznam, který obsahuje peněžní zásobu tří kategorií, nazvaných: "exports", "imports", "stock", jež je třeba ověřit. Konstanta savings je proměnná, která obsahuje peněžní zásobu, která může být potřebná k zajištění správného zásobení pokladen.

Nyní, když máte všechny potřebné položky, je čas vyrovnat peněžní zásobu uloženou v pytlích, které budou později shromážděny a rozděleny úředníkem. Vydejte se k tmavé značce X nad modrým kobercem, pro značky X nad modrým, žlutým a červeným kobercem. Zde použijeme konstantu seznamu categories k ověření, že každý pytel obsahuje všechny potřebné komponenty před odesláním.

Každý pytel by měl obsahovat komponenty uvedené v seznamu categories. Existují tři slovníkové konstanty, které odpovídají jednotlivým pytlům: blue_sack, yellow_sack a red_sack. Spusťte smyčku for při stání na značce X nad modrým kobercem, abyste ověřili, že pytel obsahuje veškeré potřebné materiály, a poté potvrďte, že zásoba je řádně evidována.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

Některé pytle by měly obsahovat veškeré potřebné materiály, ale jako obvykle v těchto cvičeních se můžete setkat s chybou. Pokud narazíte na problém, musíte použít kódové bloky try / except k odchycení chyby, v tomto případě KeyError:, která nastane, pokud daný klíč ve slovníku neexistuje. Když k tomu dojde, přidáme také finally k výjimce, který uzavře ošetření výjimky přidáním kódu, jenž se vždy spustí na konci každého ošetření výjimky. Na rozdíl od výjimek může být pouze jeden blok finally na jeden try.

Například v případě blue_sack:

try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")

Opakujte tento postup na tmavých značkách X nad kobercem žlutým a červeným, za použití slovníkových konstant yellow_sack a red_sack. V některých případech to nemusí být nutné, protože chyba nastane pouze tehdy, je-li v pytlích něco chybějící.

Nyní, když byly pytle ověřeny, je čas přejít k truhlám před kobercem: zeleným, fialovým a oranžovým. Zde musíme zajistit, že peněžní zásoba je v každé truhle přesně 30, a poté ji uzavřít.

Existují tři proměnné konstanty, které odpovídají jednotlivým truhlám, pojmenované: green_chest, purple_chest a orange_chest.

Největším problémem při ověřování truhl je, že neznáme jejich přesný obsah, a proto, když pracujete s neznámými hodnotami, můžete použít klíčové slovo assert. Toto klíčové slovo vám umožní ověřit, zda je tvrzení, které deklarujete, pravdivé či nepravdivé, což je velmi užitečné pro kontrolu, zda váš kód neobsahuje žádné chyby. Klíčové slovo assert se používá ve spojení s: try, except, else a finally a jejich různými kombinacemi k opravě kódu s chybami. Například v případě green_chest:

try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()

Ve výše uvedeném kódu ověřujeme, zda green_chest obsahuje správné množství peněžní zásoby pomocí klíčového slova assert. Pokud neobsahuje správné množství, spustí se blok except, ve kterém vypočítáme a odečteme chybějící zásobu z proměnné savings a přidáme ji do truhly. Jestliže je zásoba kompletní, spustí se blok else a potvrdí se, že veškeré majetky jsou řádně evidovány. Jakmile je vše ověřeno, spustí se blok finally a zavolá se funkce close() k uzavření truhly.

Na značkách X nad kobercem zeleným, fialovým a oranžovým se postavte proti truhlám a spusťte ověření pomocí: green_chest, purple_chest, orange_chest na příslušných barevných kobercích. Po dokončení se vydejte k lehké značce X a použijte funkci place() pro uložení zbytku proměnné savings do bedny, čímž dokončíte úroveň.

Kniha Kódu