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
Více výjimek

Cíl

Shromážděte a správně uložte několik lékařských potřeb do beden pomocí více výjimek.

Sklady na střeše je třeba doplnit, některé zásoby byly použity, ale nikdy nebyly nahrazeny. V jednom z úložišť je v poznámce objednávka na více materiálů, takže by bylo dobré to vyřídit. To znamená, že je třeba sestavit různé materiály a uložit je do beden.

Kvůli různým datovým typům a počtu materiálů, které jsou potřeba k naplnění beden, se můžeme setkat s různými chybami. Můžeme použít try / except k zachycení možných chyb a vyřešení některých problémů, ale co když se v jedné operaci vyskytne více možných chyb? Abychom to vyřešili, můžeme specifikovat, které výjimky se snažíme zachytit, a použít více výjimek.

Na začátek jděte ke zlaté značce X a postavte se k dveřím, použijte funkci open() pro vstup do skladu. Jakmile jste uvnitř, jděte ke tmavé značce X a otočte se doprava, abyste použili funkci read() a zkontrolovali, jaké materiály a v jakém množství jsou objednávány v poznámce na stole. Informace o konstantách seznamu jsou napsány v poznámce, včetně zásob a jejich objednávek. Jakmile to dokončíte, jděte ke světlé značce X uvnitř skladu, otočte se ke krabici a pomocí funkce collect() vezměte konstantu seznamu pads s materiály, takto: player.collect(pads) .

Uvnitř skladu jsou zásoby "peroxide" a "isopropyl", projděte se a sbírejte je všechny, poté vyjděte ven a zaměřte se na tmavou značku X na fialovém koberci. Na fialovém koberci, když čelíte krabici, použijte funkci collect() k uchopení "water bottle", přesuňte se k tmavé značce X na žlutém koberci a použijte funkci collect() k uchopení "glass bottle".

Nyní, když jsou položky shromážděny, je čas splnit objednávku a umístit všechny materiály do skladových beden napravo. K tomu nejprve uložíme: "water bottle", "peroxide" a "isopropyl" do seznamu nazvaného supplies. Na tmavých značkách X na červeném, zeleném a modrém koberci použijeme krabice k uložení lékařských potřeb. Proto nastavíme tři seznamy: blue_crate = [], green_crate = [] a red_crate = [].

Než umístíme všechny položky, musíme naplnit seznamy materiály. K tomu použijeme cyklus, který projde seznamy a sloučí je do jednoho jediného seznamu. Tím se všechny supplies umístí do seznamu a rozdělí se počet položek z pads podle objednávky uvedené v poznámce ve skladě.

for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])

Přesto si všimnete, že se objeví chyby, i když je vše provedeno správně a kód je bezchybný. Problém je v tom, že seznam supplies obsahuje pouze tři (3) položky, ale smyčka běží pět (5)krát, což způsobuje Index Error. Mezitím seznam pads má také pouze tři (3) položky a navíc jedna z hodnot objednávky je 0; jakékoli číslo dělené 0 způsobí Zero Division Error, protože žádné číslo nelze dělit nulou v matematice.

Zde se vyplatí použití více výjimek. Použijeme bloky kódu try / except k zachycení chyb a umožnění pokračování kódu. Vzhledem k tomu, že dochází ke dvěma chybám, musíme identifikovat každou chybu, abychom zachytili konkrétní výjimky. To se provádí rozšířením bloků except tímto způsobem: except IndexError: a except ZeroDivisionError:. Například:

for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)

Chybu Index Error opravíme tím, že chybějící místa v seznamu vyplníme "glass bottle" a chybu Zero Division Error vyřešíme přidáním hodnoty 0, pokud dojde k nelegální operaci.

Udělejte to pro seznamy blue_crate = [], green_crate = [] a red_crate = []. Jděte ke tmavé značce X na modrém, zeleném a červeném koberci a použijte funkci place() k uložení seznamů do odpovídajících beden, abyste dokončili úroveň.

Kniha Kódu