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
Přizpůsobení tříd výjimek

Cíl

Ověřte nasbíranou dešťovou vodu a zajistěte, aby byla správně zpracována a přenesena přizpůsobením tříd výjimek.

Na vzdáleném konci střešního komplexu se nachází zásobník nasbírané dešťové vody, která se filtruje a přenáší po celé budově pro různé účely. Některé ventily na horní stěně řídí tlak protékající vody, zatímco poslední sklad obsahuje různé ohřívače vody. Obsluha strojů může být složitá, ale jejich provoz lze efektivně zjednodušit definováním chybových kódů a zavedením účinných protiozí. To se dosáhne přizpůsobením tříd výjimek, které vytvoříte pro své vlastní výjimky.

V kódu jsou nastaveny dvě vlastní třídy výjimek, jejichž použití bude klíčové při řešení problémů s technikou, se kterými se setkáte. První je výjimka pro řešení problémů s tlakem vody. Měla by být použita s ventily, aby se zajistil správný průtok vody do komplexu, nebo pokud je třeba tlak upravit. V závislosti na tom, zda je tlak pod 100 nebo nad 300, je výjimkou proveden jiný krok; tlak je argument, který uživatel musí zadat. Po aktivaci se zobrazí vlastní vyskakovací okno s chybovým kódem a zprávou.

class PressureError(Exception): def __init__(self, pressure, message="Water pressure is offset, pressure is: ", error_code=404): self.pressure = pressure self.message = message self.error_code = error_code super().__init__(self.message) async def __str__(self): await player.write("[Error: %s {%s %s}]" % (self.error_code , self.message, self.pressure)) if self.pressure < 100: return ("Valve has been closed") if self.pressure > 360: return ("Valve has been opened")

Druhá vlastní třída výjimek je určena k úpravě teploty v ohřívačích vody; pokud je teplota příliš nízká nebo příliš vysoká, musíte jako argument zadat novou teplotu, abyste chybu opravili poté, co nastane.

class TemperatureError(Exception): def __init__(self, temp, message="Temperature is not appropiate, enter new temperature: ", error_code=808): self.temp = temp self.message = message self.error_code = error_code super().__init__(self.message) async def __str__(self): await player.write("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

Začněte tak, že se přejděte k lehkému křížku X nad zeleným kobercem a postavíte se tváří v tvář nádrži s ventilem, přičemž existují čtyři (4) takové, které regulují tlak vody čerpané ze zásobníku. Existují čtyři (4) konstantní proměnné: green_pressure, red_pressure, blue_pressure a orange_pressure, které uchovávají tlak v jednotlivých nádržích odpovídajících barevným kobercům.

Na všech lehkých křížcích X použijte bloky kódu try/except a else, abyste ověřili, zda je tlak v každé nádrži vhodný. Pokud je tlak pod 100 nebo nad 300, vyvolejte vlastní výjimku PressureError a předejte jako argument aktuální tlak. Pokud je výjimka aktivována, vyvolá se chybový kód a provede se oprava; jinak se aktivuje větev else, která potvrdí, že tlak v nádrži je v pořádku. Například:

try: if green_pressure < 100 or green_pressure > 360: raise PressureError(green_pressure) except PressureError as x: player.speak(x) else: player.speak( "Pressure is appropriate" )

Udělejte to na všech lehkých křížcích X, přičemž použijte konstanty proměnných odpovídající jednotlivým barevným kobercům, a ověřte nebo upravte ventily tlaku podle potřeby.

Po dokončení se vydejte ke zlatému křížku X a použijte funkci open() pro přístup do skladu s ohřívačem vody. Jakmile vstoupíte, přejděte ke zlatému křížku X uvnitř skladu a pomocí funkce read() si přečtěte poznámku na pultu. Tato poznámka vám poskytne informace o ideální teplotě pro každý ohřívač vody.

Jakmile budete mít informace o jednotlivých teplotách, přejděte ke tmavému křížku X nad fialovým kobercem. Zde použijeme sekvenci kódu try/except a else, abychom ověřili, že ohřívače vody mají správnou teplotu. Jsou zde další čtyři (4) konstanty proměnných spojené s barevnými koberci: purple_temperature, yellow_temperature, pink_temperature a white_temperature.

V sekvenci ověříme, zda je teplota pod 100. Pokud ano, vyvoláme výjimku TemperatureError. Jako upravená výjimka vyžaduje argument, v tomto případě musíte zadat teplotu přečtenou z poznámky, abyste správně provedli protiozí k nápravě chyby. Například:

try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )

Udělejte to pro všechny ohřívače vody. Na každém křížku X, když se díváte na ohřívače, proveďte sekvenci s použitím konstant proměnných odpovídajících příslušným barevným kobercům, abyste úspěšně dokončili úroveň.

Kniha Kódu