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

Обработка исключений
Блок else

Цель

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

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

Из-за неорганизованного характера материалов можно ожидать ошибок. Вы можете воспользоваться блоком кода try / except, однако это может быть немного сложно, если вы не знакомы с возможными ошибками. Тем не менее, вы можете расширить инструментарий обработки исключений, добавив секцию else. Это позволяет выполнять код, если блок исключения не был выполнен, что упрощает ваш код и хорошо подходит для идентификации и устранения ошибок.

Для начала пройдите в склад с левой стороны и направляйтесь к светлой метке X. В этом складе хранятся шиферные листы, используемые для ремонта черепицы. Используйте функцию collect() чтобы подобрать список с именем константы shingles.

В этом списке, вероятно, перемешаны несколько мусорных материалов, которые необходимо удалить, более того, они хранятся в шести (6) различных отсеках, каждый со своим количеством материалов. Вам необходимо объединить все материалы в одну кучу. Создайте переменную с именем red_storage для хранения всех материалов и список с именем junk, чтобы размещать все отходы.

Обычно вы просто определяете материалы, преобразуете их в целые числа с помощью int() и сохраняете их в переменной, чтобы потом убрать. Но, как можно ожидать, учитывая предыдущие уровни в главе и тематику этого упражнения, ошибка неизбежна.

for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])

Это, к сожалению, создаст ошибку Value Error, так как некоторые элементы в списке, по-видимому, не являются числами. Чтобы исправить это, вы можете использовать блоки кода try / except и else для сортировки материалов. Используя блок else, мы фактически трансформируем блок except в фильтр, который удаляет нежелательные элементы из списка, в то время как блок else перехватывает и переносит корректные элементы в созданную нами переменную.

for x in range(6): try: player.speak(int(shingles[x])) except: player.speak("Item %s is junk" % (x)) junk.append(shingles[x]) else: red_storage+=int(shingles[x])

Теперь переменная red_storage содержит все пригодные для использования шиферные листы, а весь мусор был добавлен в список junk. Пройдите к золотой метке X в текущем левом складе и используйте функцию write(), чтобы записать количество шиферных листов для хранения, следующим образом: await player.write("There are %s shingles ready for use in storage" % (red_storage)). Затем пройдите к темной метке X на красном ковре и используйте функцию place() чтобы разместить переменную red_storage в ящике.

После выполнения этой задачи отправляйтесь в правый склад, где хранятся деревянные доски и материалы, необходимые для ремонта крыши и стен. Направляйтесь к темной метке X на зеленом ковре и используйте функцию collect(), чтобы взять список-константу с именем planks_set из ящика; этот список содержит доски, уже очищенные от отходов. Пройдите к светлой метке X рядом с ним и снова используйте функцию collect() чтобы взять другой список-константу с именем shipment, это материалы досок, которые были недавно доставлены и всё ещё содержат некоторые отходы.

Как и в предыдущем помещении, в списке shipment вероятно перемешаны несколько мусорных материалов, которые необходимо удалить. Так же, как и раньше, они хранятся в шести (6) различных отсеках, каждый с определенным количеством материалов. Создайте переменную с именем blue_storage для хранения всех материалов, чтобы объединить их в одну кучу. Как и раньше, отходы будут размещаться в списке junk.

Что касается досок, мы собираемся преобразовать и добавить все полезные материалы из списка shipment в список planks_set, а затем объединить их все, используя int(), в переменную blue_storage. Однако, как и прежде, можно ожидать ошибок.

for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])

На этот раз можно ожидать ошибку Type Error, которая возникает, когда пытаются сложить числа и строки. Это можно исправить, снова используя блоки кода try / except и else: блок try объединяет списки, блок except отфильтровывает мусор из списка, а секция else добавляет доски в blue_storage.

for y in range(6): try: planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) except: player.speak( "Item %s is junk. Slot only has %s items" % (y,planks_set[y])) junk.append(shipment[y]) else: blue_storage+=int(planks_set[y])

Теперь, когда переменная blue_storage заполнена, вы можете задокументировать и сохранить все деревянные доски. Пройдите к золотой метке X в правом складе, обернувшись к столу, и используйте функцию write(), чтобы подсчитать объединенные материалы, следующим образом: await player.write("There are %s planks ready for use in storage" % (blue_storage))

Чтобы завершить уровень, пройдите к темной метке X на синем ковре и используйте функцию place() чтобы сохранить переменную blue_storage в ящике. Затем пройдите к темной метке X на фиолетовом ковре в средней комнате и используйте функцию place() чтобы выбросить список junk в мусоропровод, завершая задание.

Книга Кода