Coding for KidsCoding for Kids
Poziomy KreatywneWyzwaniaPrzewodnik dla Nauczycieli
Głosuj na funkcje
Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom

Obsługa wyjątków
Dostosowywanie klas wyjątków

Cel

Zweryfikuj zebraną wodę deszczową i upewnij się, że jest ona poprawnie przetwarzana i przekazywana poprzez dostosowywanie klas wyjątków.

Na końcu kompleksu dachów znajduje się zbiornik na zebraną wodę deszczową, która jest filtrowana i przekazywana w całym budynku do różnych celów. Niektóre zawory na górnej ścianie kontrolują przepływ ciśnienia wody, natomiast ostatni magazyn mieści różne podgrzewacze wody. Obsługa maszyn może być trudna, jednak ich działanie można usprawnić poprzez określenie kodów błędów i wdrożenie skutecznych środków zaradczych. Osiąga się to poprzez dostosowanie klas wyjątków, które tworzysz na potrzeby własnych wyjątków.

W edytorze kodu zdefiniowane są dwie niestandardowe klasy wyjątków, a umiejętność ich wykorzystania będzie niezbędna do rozwiązywania problemów z maszynami, na które napotkasz. Pierwszy z nich to wyjątek do diagnozowania ciśnienia wody. Jest przeznaczony do użycia z zaworami, aby upewnić się, że woda przepływa prawidłowo do kompleksu lub aby dostosować ciśnienie. W zależności od tego, czy ciśnienie jest poniżej 100 lub powyżej 300, wyjątek podejmuje różne akcje; ciśnienie podawane jest jako argument przez użytkownika. Po wywołaniu pojawia się spersonalizowane okno dialogowe z kodem błędu oraz wiadomością.

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

Druga niestandardowa klasa wyjątków służy do regulacji temperatury w podgrzewaczach wody; jeśli temperatura jest zbyt niska lub zbyt wysoka, musisz podać nową temperaturę jako argument, aby skorygować błąd w momencie jego wystąpienia.

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

Na początek przejdź do jasnego znaku X na zielonym dywanie i skonfrontuj się z bakiem wyposażonym w zawór; znajduje się tam cztery (4) zawory regulujące ciśnienie wody pompowanej ze zbiornika. Istnieją cztery (4) stałe zmienne: green_pressure, red_pressure, blue_pressure oraz orange_pressure; przechowują one ciśnienie w każdym z baków odpowiadających dywanom w odpowiednich kolorach.

Na wszystkich jasnych znakach X użyj sekwencji bloków kodu try/except oraz else, aby sprawdzić, czy ciśnienie w każdym baku jest odpowiednie. Jeśli ciśnienie jest poniżej 100 lub powyżej 300, zgłoś niestandardowy wyjątek PressureError i podaj ciśnienie jako argument. Jeśli wyjątek zostanie wywołany, podniesie on kod błędu i zastosuje korektę, w przeciwnym razie wywołana zostanie klauzula else, potwierdzająca, że ciśnienie w baku jest odpowiednie. Na przykład:

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

Zrób to we wszystkich jasnych znakach X, używając stałych zmiennych odpowiadających poszczególnym kolorowym dywanom i odpowiednio sprawdzaj lub dostosowuj zawory ciśnienia.

Po zakończeniu przejdź do złotego znaku X i użyj funkcji open(), aby uzyskać dostęp do magazynu z podgrzewaczem wody. Gdy już wewnątrz, przejdź do złotego znaku X znajdującego się w magazynie i użyj funkcji read(), aby przeczytać notatkę na ladzie. Ta notatka dostarczy Ci informacji o idealnej temperaturze dla każdego z podgrzewaczy wody.

Gdy zdobędziesz informacje o poszczególnych temperaturach, przejdź do ciemnego znaku X na fioletowym dywanie; tutaj użyjemy sekwencji kodu try/except oraz else, aby zweryfikować, czy podgrzewacze wody mają właściwą temperaturę. Istnieją cztery (4) kolejne stałe zmienne związane z kolorowymi dywanami: purple_temperature, yellow_temperature, pink_temperature oraz white_temperature.

W tej sekwencji sprawdzimy, czy temperatura jest poniżej 100; if it is, zgłoszony zostanie wyjątek TemperatureError. Jako niestandardowy wyjątek przyjmuje on argument, w tym przypadku musisz wprowadzić temperaturę odczytaną z notatki, aby prawidłowo zastosować środek zaradczy naprawiający problem. Na przykład:

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

Zrób to dla wszystkich podgrzewaczy wody; na każdym znaku X, stojąc przed podgrzewaczami, wykonaj sekwencję używając odpowiednich stałych zmiennych odpowiadających kolorowym dywanom, aby ukończyć poziom.

Księga Kodów