Coding for KidsCoding for Kids
Niveluri CreativeProvocăriGhid pentru Profesori
Votează pentru funcții
Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel

Gestionarea Excepțiilor
Clauza Else

Obiectiv

Ia materialele de reparații și sortează-le, apoi elimină deșeurile nedorite folosind clauza else împreună cu gestionarea excepțiilor.

Unele materiale de reparații au fost depozitate la etajul superior al clădirii, acestea fiind folosite pentru a repara acoperișul după furtuni sau uzură generală. Unele au fost livrate recent și sunt încă depozitate în ambalaje și containere, altele au fost depozitate de foarte mult timp și au fost aruncate împreună cu gunoaiele. Ar fi o idee bună să sortezi materialele și să le depozitezi corespunzător, eliminând resturile și deșeurile.

Datorită naturii materialelor dezorganizate, poți să te aștepți, cel mai probabil, la erori. Poți aborda asta folosind blocul de cod try / except, însă poate fi puțin complicat dacă nu ești familiarizat cu ce erori s-ar putea ivi. Totuși, poți extinde instrumentele de gestionare a excepțiilor adăugând clauza else. Aceasta îți permite să rulezi cod dacă blocul except nu este executat, facilitând astfel fluxul de cod și fiind ideală pentru identificarea și remedierea erorilor.

Pentru început, ar trebui să intri în depozitul din stânga și să te îndrepți spre semnul X luminos. Această cameră depozitează șindrilă folosită pentru a repara țigla acoperișului. Folosește funcția collect() pentru a ridica constanta de listă numită shingles.

Lista probabil conține câteva materiale nedorite amestecate, care trebuie eliminate, mai ales că sunt depozitate în șase (6) compartimente diferite, fiecare cu propria cantitate de materiale. Trebuie să aduni toate materialele într-un singur teanc. Creează o variabilă numită red_storage pentru a stoca toate materialele și o listă numită junk pentru a putea plasa toate deșeurile.

În mod normal, ai identifica materialele, le-ai converti în numere întregi folosind int() și le-ai stoca într-o variabilă pentru a le putea depozita. Dar, după cum probabil te poți aștepta, având în vedere nivelurile anterioare din capitol și subiectul acestui exercițiu, o eroare este aproape sigură.

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

Acest cod va genera, din păcate, o eroare de tip Value Error, deoarece unele elemente din listă par a nu fi numere. Pentru a remedia asta, poți folosi blocurile de cod try / except și else pentru a sorta materialele. Folosind blocul else, transformăm efectiv blocul except într-un filtru care elimină elementele nedorite din listă, în timp ce blocul else capturează și transferă elementele valide în variabila pe care am creat-o.

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

Acum, variabila red_storage conține toate șindrilele utilizabile, iar gunoaiele au fost adăugate în lista junk. Mergi la semnul X de culoare auriu din depozitul din stânga în care te afli și folosește funcția write() pentru a nota numărul de șindrile pregătite pentru depozitare, astfel: await player.write("There are %s shingles ready for use in storage" % (red_storage)). Ulterior, mergi la semnul X de culoare închisă peste covorul roșu și folosește funcția place() pentru a depozita variabila red_storage în cutie.

Odată ce această sarcină este finalizată, îndreaptă-te spre depozitul din dreapta, această cameră depozitând scânduri de lemn și materialele necesare pentru reparația structurilor acoperișului și pereților. Mergi spre semnul X de culoare închisă peste covorul verde și folosește funcția collect() pentru a ridica constanta de listă numită planks_set din cutie, această listă conținând scânduri care au fost deja curățate de orice deșeu. Mergi la semnul X luminos de lângă ea și folosește din nou funcția collect() pentru a ridica o altă constantă de listă numită shipment, acestea fiind materiale de scânduri care au fost expediate recent și încă conțin ceva deșeuri.

La fel ca în camera anterioară, lista shipment probabil conține mai multe materiale nedorite amestecate, care trebuie eliminate. La fel ca înainte, acestea sunt depozitate în șase (6) compartimente diferite, fiecare cu propria cantitate de materiale. Creează o variabilă numită blue_storage pentru a stoca toate materialele astfel încât să le poți aduna într-un singur teanc. La fel ca înainte, materialele de deșeu vor fi depozitate în lista junk.

Pentru scânduri, vom converti și adăuga toate materialele utile din lista shipment la lista planks_set, apoi le vom consolida, folosind int(), în variabila blue_storage. Totuși, la fel ca înainte, trebuie să te aștepți la erori.

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

De data aceasta, poți aștepta o eroare de tip Type Error, care apare atunci când încerci să aduni numere și șiruri de caractere. Acest lucru poate fi rezolvat din nou folosind blocurile try / except și else; blocul try adună listele, blocul except filtrează elementele nedorite din listă, iar clauza else adaugă scândurile în variabila 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])

Acum că variabila blue_storage este populată, poți documenta și depozita toate scândurile de lemn. Mergi la semnul X auriu din depozitul din dreapta în care te afli, îndreaptă-te spre masă și folosește funcția write() pentru a nota materialele consolidate, astfel: await player.write("There are %s planks ready for use in storage" % (blue_storage))

Pentru a finaliza nivelul, mergi la semnul X de culoare închisă de pe covorul albastru și folosește funcția place() pentru a depozita variabila blue_storage în cutie. Apoi, mergi la semnul X de culoare închisă peste covorul mov din camera centrală și folosește funcția place() pentru a arunca lista junk în canalul de deșeuri, finalizând astfel sarcina ta.

Carte de Cod