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
Instrukcja else

Cel

Weź materiały naprawcze i posegreguj je, a następnie usuń niechciane odpady, używając klauzuli else wraz z obsługą wyjątków.

Niektóre materiały naprawcze były przechowywane na szczycie budynku; są wykorzystywane do naprawy dachu po burzach lub ogólnym zużyciu. Niektóre dostarczono niedawno i nadal są przechowywane w opakowaniach i pojemnikach, inne były przechowywane bardzo długo i wrzucono je razem ze śmieciami. Dobrym pomysłem byłoby posegregowanie materiałów, odpowiednie ich przechowywanie oraz usunięcie śmieci i odpadów.

Ze względu na nieuporządkowany charakter materiałów, najprawdopodobniej wystąpią błędy. Możesz rozwiązać to za pomocą bloku kodu try / except, jednak może to być nieco trudne, jeśli nie jesteś zaznajomiony z ewentualnymi błędami, na jakie możesz natrafić. Możesz jednak rozszerzyć swoje narzędzia do obsługi wyjątków, dodając klauzulę else. Pozwala to na wykonanie kodu, jeśli blok except nie zostanie uruchomiony, co upraszcza kod i jest odpowiednie przy identyfikacji i usuwaniu błędów.

Na początek powinieneś wejść do lewego magazynu i podążać w stronę jasnego znaku X. W tym pomieszczeniu przechowywane są dachówki używane do naprawy dachówek. Użyj funkcji collect() aby zebrać stałą listę o nazwie shingles.

Lista prawdopodobnie zawiera kilka zmieszanych materiałów niepożądanych, które należy usunąć, ponadto są one przechowywane w sześciu (6) różnych przegrodach, z których każda zawiera określoną ilość materiałów. Musisz zebrać wszystkie materiały w jednym miejscu. Utwórz zmienną o nazwie red_storage, aby przechowywać wszystkie materiały, oraz listę o nazwie junk, aby umieszczać wszystkie odpady.

Normalnie po prostu zidentyfikowałbyś materiały, przeliczył je na liczby całkowite przy pomocy int() i zapisał w zmiennej, aby móc je odłożyć. Jednak, jak zapewne się spodziewasz, biorąc pod uwagę poprzednie poziomy w tym rozdziale oraz temat tego ćwiczenia, błąd jest nieunikniony.

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

To niestety spowoduje błąd wartości (Value Error), ponieważ niektóre elementy listy wydają się nie być liczbami. Aby temu zaradzić, możesz użyć bloków kodu try / except oraz else do sortowania materiałów. Używając bloku else, skutecznie przekształcamy blok except w filtr, który usuwa niechciane elementy z listy, podczas gdy blok else wychwytuje i przenosi dobre elementy listy do utworzonej zmiennej.

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

Dzięki temu zmienna red_storage zawiera teraz wszystkie użyteczne dachówki, natomiast wszystkie śmieci zostały dodane do listy junk. Udaj się do złotego znaku X w lewym magazynie, w którym obecnie się znajdujesz, i użyj funkcji write(), aby zanotować liczbę dachówek przygotowanych do przechowywania, na przykład: await player.write("There are %s shingles ready for use in storage" % (red_storage)). Następnie udaj się do ciemnego znaku X na czerwonym dywanie i użyj funkcji place() aby umieścić zmienną red_storage w skrzyni.

Po ukończeniu tego zadania udaj się do prawego magazynu, w którym przechowywane są deski oraz materiały potrzebne do naprawy konstrukcji dachowych i ścian. Skieruj się do ciemnego znaku X na zielonym dywanie i użyj funkcji collect(), aby pobrać stałą listę o nazwie planks_set ze skrzyni. Ta lista zawiera deski, które zostały już oczyszczone z wszelkich odpadów. Następnie udaj się do jasnego znaku X obok niej i ponownie użyj funkcji collect(), aby pobrać kolejną stałą listę o nazwie shipment, zawierającą materiały deskowe, które zostały niedawno wysłane i nadal zawierają pewne odpady.

Podobnie jak w poprzednim pomieszczeniu, lista shipment prawdopodobnie zawiera kilka zmieszanych materiałów niepożądanych, które należy usunąć. Tak jak poprzednio są one przechowywane w sześciu (6) różnych przegródkach, z których każda zawiera określoną ilość materiałów. Utwórz zmienną o nazwie blue_storage, aby przechowywać wszystkie materiały, żeby można je było skonsolidować w jedną całość. Podobnie, materiały odpadowe będą umieszczane na liście junk.

W przypadku desek zamierzamy przeliczyć i dodać wszystkie użyteczne materiały z listy shipment do listy planks_set, aby następnie skonsolidować je, używając int(), w zmiennej blue_storage. Jednak tak jak poprzednio, należy spodziewać się błędów.

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

Tym razem możesz spodziewać się błędu typu (Type Error), który występuje, gdy próbujesz dodać razem liczby i ciągi znaków. Można to rozwiązać, używając ponownie bloków try / except oraz else. Blok try dodaje elementy listy, blok except filtruje śmieci z listy, a klauzula else dodaje deski do zmiennej 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])

Teraz, gdy zmienna blue_storage jest wypełniona, możesz udokumentować i przechowywać wszystkie deski. Udaj się do złotego znaku X w prawym magazynie, stań przy stole i użyj funkcji write(), aby podsumować skonsolidowane materiały, na przykład: await player.write("There are %s planks ready for use in storage" % (blue_storage))

Aby zakończyć poziom, udaj się do ciemnego znaku X na niebieskim dywanie i użyj funkcji place(), aby umieścić zmienną blue_storage w skrzyni. Następnie udaj się do ciemnego znaku X na fioletowym dywanie w środkowej komorze i użyj funkcji place(), aby wyrzucić listę junk do przepustnicy na śmieci, kończąc swoje zadanie.

Księga Kodów