Coding for KidsCoding for Kids
Kreatív SzintekKihívásokTanári Útmutató
Szavazzon a funkciókra
Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint

Kivételkezelés
Több kivétel

Cél

Gyűjtsd össze és tárold el helyesen az orvosi ellátmányokat ládákban, több kivétel használatával.

A tetőn lévő raktárakat újra kell tölteni, mivel néhány ellátmányt használtak, de soha nem pótoltak. Az egyik raktárban lévő feljegyzésben vásároltak további anyagokat, így érdemes lenne ezt intézni. Mindemellett számos különféle anyagot kell összegyűjteni és ládákban elhelyezni.

Mivel a ládák feltöltéséhez szükséges anyagok különböző adattípusai és mennyiségei miatt többféle hiba léphet fel, a try / except segítségével el tudjuk kapni a lehetséges hibákat és kijavítani néhány problémát, de mi történik, ha egy művelet során több hiba is felmerül? Ennek kezelésére specifikálhatjuk, mely kivételeket szeretnénk elkapni, és több kivétel használatával járhatunk el.

Kezdetként haladj az arany X jelzés felé, és nézz az ajtóra; használd az open() függvényt a raktárba való belépéshez. Miután bent vagy, menj a sötét X jelzéshez, és fordulj jobbra, hogy a read() függvény segítségével megnézd, milyen anyagokat és mennyiségeket rendelnek a asztalon lévő feljegyzésben. A feljegyzésben listaállandók adatai szerepelnek, beleértve az ellátmányokat és a hozzájuk tartozó rendeléseket. Miután ezt megtetted, haladj a raktárban lévő világos X jelzés felé, fordulj a láda irányába, és a collect() függvény segítségével vedd fel a pads listaállandót, így: player.collect(pads) .

A raktárban megtalálhatóak a "peroxide" és "isopropyl" készletek is, haladj, és gyűjtsd be ezeket, majd indulj ki, és menj a lila szőnyeg felett lévő sötét X jelzéshez. A lila szőnyegen, miközben a láda felé nézel, használd a collect() függvényt a "water bottle" felvételéhez, aztán menj a sárga szőnyeg felett lévő sötét X jelzéshez, és használd a collect() függvényt a "glass bottle" elvételéhez.

Miután az elemeket összegyűjtötted, eljött az idő a rendelés teljesítésére, és az anyagokat a jobb oldalon lévő raktári ládákba helyezni. Ehhez először tárold a "water bottle", "peroxide" és "isopropyl" elemeket egy, supplies nevű listában. A sötét X jelzéseknél, amelyek a red, green és blue szőnyegek felett találhatók, a ládákban fogjuk tárolni az orvosi ellátmányokat. Ehhez három listát kell létrehozni: blue_crate = [], green_crate = [] és red_crate = [].

Mielőtt elhelyeznéd az elemeket, fel kell töltened az összes listát az anyagokkal; ehhez egy ciklust fogsz használni, ami végigiterál a listákon és egyetlen listába egyesíti azokat. Ez a művelet a listába illeszti az összes supplies elemet, és a pads elemek számát a raktárban található feljegyzés szerinti order alapján osztja el.

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

Mindazonáltal észre fogod venni, hogy hibák fognak jelentkezni, annak ellenére, hogy minden helyesen lett végrehajtva, és a kód is hibamentes. A probléma az, hogy a supplies lista csupán három (3) elemet tartalmaz, de a ciklus öt (5) alkalommal fut le, ami egy Index Error-t eredményez. Ezzel párhuzamosan a pads lista sem több, mint három (3) elemet tartalmaz, és az egyik rendelési érték 0, ami miatt bármely szám osztva 0-val egy Zero Division Error-t vált ki, mivel matematikailag egy számot sem lehet 0-val osztani.

Itt jönnek jól a több kivétel: a try / except kódrészletek segítségével elkapjuk a hibákat és folytatni tudjuk a program futtatását. Mivel két hiba fordul elő, mindkettőt azonosítanunk kell a megfelelő kivételek elkapásához. Ezt úgy tehetjük meg, hogy kiterjesztjük az except blokkokat az alábbi módon: except IndexError: és except ZeroDivisionError:. Például:

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)

A Index Error javítására a listában lévő hiányzó helyeket "glass bottle" értékkel töltjük ki, míg a Zero Division Error esetében egy 0 értéket adunk hozzá, ha az illegális művelet bekövetkezik.

Alkalmazd ezt a blue_crate = [], green_crate = [] és red_crate = [] listákra. Haladj a sötét X jelzéshez a blue, green és red szőnyegek felett, és használd a place() függvényt, hogy a listákat a megfelelő ládákba helyezd el a szint teljesítéséhez.

Kódkönyv