Coding for KidsCoding for Kids
Творческие УровниИспытанияРуководство для Учителей
Голосовать за функции
Продвинутый курс разработки на Python
Глава
>
Уровень

Обработка исключений
Настройка классов исключений

Цель

Проверьте собранную дождевую воду и убедитесь, что она правильно обрабатывается и распределяется, настраивая пользовательские классы исключений.

В самом конце крыши комплекса находится цистерна с собранной дождевой водой; эта вода фильтруется и распределяется по зданию для различных нужд. Некоторые клапаны на верхней стене регулируют подачу воды, а в последнем складском помещении находятся различные водонагреватели. Управлять оборудованием может быть сложно, однако его работу можно оптимизировать, обозначив коды ошибок и настроив эффективные меры противодействия. Это достигается с помощью настройки классов исключений, которые вы создаете для своих пользовательских исключений.

В редакторе кода настроены два пользовательских класса исключений; ваша способность использовать их будет иметь важное значение для устранения любых проблем с оборудованием, с которыми вы столкнетесь. Первый — исключение для устранения неполадок с водяным давлением. Оно предназначено для использования с клапанами, чтобы обеспечить правильное поступление воды в комплекс или для регулировки давления. В зависимости от того, ниже ли давление 100 или выше 300 выполняется разное действие, поскольку давление передается в качестве аргумента, который должен быть указан пользователем. После активации отображается настраиваемое всплывающее окно с кодом ошибки и сообщением.

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

Второй пользовательский класс исключений предназначен для регулирования температуры в водонагревателях: если температура слишком низкая или слишком высокая, вы должны ввести новую температуру в качестве аргумента, чтобы исправить ошибку, как только она возникнет.

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

Для начала подойдите к легкому знаку X на зеленом ковре и повернитесь к баку с клапаном, их всего четыре, которые регулируют давление воды, перекачиваемой из цистерны. Существуют четыре константы-переменные: green_pressure, red_pressure, blue_pressure и orange_pressure; они содержат давление в каждом баке, соответствующем цвету ковра.

На всех легких знаках X используйте последовательности блоков кода try/except и else для проверки, соответствует ли давление в каждом баке норме. Если давление ниже 100 или выше 300, вызовите пользовательское исключение PressureError и передайте давление в качестве аргумента. При активации оно выдаст код ошибки и произведет коррекцию, в противном случае срабатывает блок else, подтверждая, что давление в баке соответствует норме. Например:

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

Сделайте это на всех легких знаках X, используя переменные-константы, соответствующие каждому из цветных ковров, и либо проверьте, либо отрегулируйте клапаны давления по мере необходимости.

После этого подойдите к золотому знаку X и используйте функцию open(), чтобы получить доступ к складу с водонагревателем, затем, оказавшись внутри, подойдите к золотому знаку X и используйте функцию read(), чтобы прочитать записку на прилавке. Эта записка предоставит вам информацию о том, какая температура является оптимальной для каждого водонагревателя.

Как только вы получите информацию о каждой температуре, подойдите к темному знаку X на пурпурном ковре, где мы будем использовать последовательность блоков кода try/except и else, чтобы проверить, соответствует ли температура в водонагревателях требуемой. Есть еще четыре переменные-константы, связанные с коврами определенных цветов: purple_temperature, yellow_temperature, pink_temperature и white_temperature.

В этой последовательности мы проверим, ниже ли температура 100, и если да, вызовем исключение TemperatureError. Как пользовательское исключение, оно принимает аргумент, в данном случае вы должны ввести ту температуру, которая указана в записке, чтобы корректно выполнить меру противодействия для исправления проблемы. Например:

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

Сделайте это для всех водонагревателей: на каждом знаке X, при обращении к водонагревателям, выполните последовательность с использованием переменных-констант, соответствующих нужным цветным коврам, чтобы пройти уровень.

Книга Кода