Coding for KidsCoding for Kids
Креативні РівніВикликиПосібник для Вчителів
Голосувати за функції
Поглиблений курс розробки на Python
Розділ
>
Рівень

Обробка виключень
Блок else

Мета

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

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

Через хаотичність матеріалів можна очікувати помилки. Ви можете вирішити це за допомогою блоку коду try / except, проте це може бути дещо складно, якщо ви не знайомі з можливими помилками. Ви також можете розширити свої інструменти обробки виключень, додавши блок else. Це дозволяє виконувати код, якщо блок except не спрацьовує, що сприяє оптимізації вашого коду та добре підходить для виявлення та усунення помилок.

Для початку вам слід увійти до лівого складу і направитися до світлого 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 через сміттєвий канал, завершуючи ваше завдання.

Книга Коду