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

Gestionarea Excepțiilor
Excepții Multiple

Obiectiv

Colectează și depozitează corect unele materiale medicale în cutii folosind multiple excepții.

Depozitele din acoperiș trebuie reaprovizionate, unele dintre materiale au fost folosite, dar nu au fost niciodată înlocuite. Există o comandă plasată pentru mai multe materiale, scrisă într-un memou din unul dintre depozite; ar fi o idee bună să se rezolve această problemă. Totuși, există o varietate de materiale diferite care trebuie adunate și depozitate în cutii.

Din cauza diferitelor tipuri de date și a numărului de materiale necesare pentru a umple cutiile, putem întâmpina diverse erori. Putem folosi try / except pentru a prinde eventualele erori și a remedia unele probleme, dar ce se întâmplă când într-o singură operație pot apărea mai multe erori? Pentru a rezolva acest lucru, putem specifica care excepții încercăm să le prindem și să folosim mai multe blocuri de excepții.

Pentru început, mergi la semnul X auriu și orientează-te către ușă, folosește funcția open() pentru a intra în depozit. Odată ajuns înăuntru, mergi la semnul X întunecat și întoarce-te la dreapta pentru a folosi funcția read() și a verifica ce materiale și cantități se comandă în memoul de pe masă. Informațiile despre constantele de listă sunt scrise în memou, incluzând materialele și comenzile aferente. După ce termini, mergi la semnul X luminos din interiorul depozitului, întoarce-te spre cutie și ia constanta de listă pads a materialelor din interior folosind funcția collect(), astfel: player.collect(pads).

În interiorul depozitului se găsesc stocuri de "peroxide" și "isopropyl"; mergi și colectează-le pe toate, apoi ieși și îndreaptă-te către semnul X întunecat peste un covor mov. Pe covorul mov, în timp ce te orientezi spre cutie, folosește funcția collect() pentru a lua "water bottle", apoi mergi la semnul X întunecat de pe covorul galben și folosește funcția collect() pentru a lua "glass bottle".

Acum că materialele au fost colectate, este timpul să îndeplinești comanda și să plasezi toate materialele în cutiile depozitului din dreapta. Pentru aceasta, vom stoca mai întâi: "water bottle", "peroxide" și "isopropyl" într-o listă numită supplies. Pe semnele X întunecate de pe covoarele red, green și blue vom folosi cutiile pentru a depozita materialele medicale. Pentru aceasta, vom crea trei liste: blue_crate = [], green_crate = [] și red_crate = [].

Înainte de a plasa toate elementele, trebuie să completăm toate listele cu materiale. Pentru aceasta, vom folosi un ciclu pentru a itera prin liste și a le combina într-o singură listă. Acest lucru va adăuga toate elementele din supplies în listă și va împărți numărul elementelor din pads conform order-ului din memoul depozitului.

for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])

În ciuda acestui fapt, vei observa că vor apărea erori, chiar dacă totul a fost realizat corect și codul este solid. Totuși, iată problema: lista supplies conține doar trei (3) elemente, dar ciclul se execută de cinci (5) ori, cauzând o eroare de tip Index Error. Între timp, lista pads nu numai că are doar trei (3) elemente, dar una dintre valorile din order este 0, iar orice număr împărțit la 0 cauzează o eroare de tip Zero Division Error, deoarece niciun număr nu poate fi împărțit la 0 în matematică.

Aici intervin excepțiile multiple: folosim blocurile de cod try / except pentru a prinde erorile și a ne permite să continuăm execuția codului. Având în vedere că două erori apar, trebuie să identificăm fiecare eroare pentru a prinde excepțiile specifice. Acest lucru se realizează prin extinderea blocurilor except astfel: except IndexError: și except ZeroDivisionError:. De exemplu:

for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)

Eroarea de tip Index Error este corectată prin umplerea spațiilor lipsă din listă cu "glass bottle", iar eroarea de tip Zero Division Error este rezolvată prin adăugarea valorii 0 în cazul în care operația ilegală are loc.

Fă același lucru pentru listele blue_crate = [], green_crate = [] și red_crate = []. Mergi la semnele X întunecate de pe covoarele blue, green și red și folosește funcția place() pentru a plasa listele în cutiile corespunzătoare pentru a finaliza nivelul.

Carte de Cod