Coding for KidsCoding for Kids
Δημιουργικά ΕπίπεδαΠροκλήσειςΟδηγός Εκπαιδευτικού
Ψηφίστε για λειτουργίες
Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο

Διαχείριση Εξαιρέσεων
Πολλαπλές Εξαιρέσεις

Στόχος

Συλλέξτε και αποθηκεύστε σωστά μερικά ιατρικά εφόδια σε κουτιά χρησιμοποιώντας πολλαπλές εξαιρέσεις.

Οι αποθήκες στη στέγη πρέπει να ανανεωθούν, μερικά από τα εφόδια χρησιμοποιήθηκαν αλλά δεν αντικαταστάθηκαν ποτέ. Υπάρχει μια παραγγελία για περισσότερα υλικά σε ένα σημείωμα σε μία από τις αποθήκες, θα ήταν καλή ιδέα να την τακτοποιήσετε. Με άλλα λόγια, υπάρχουν διάφορα υλικά που πρέπει να συναρμολογηθούν και να αποθηκευτούν σε κουτιά.

Λόγω των διαφορετικών τύπων δεδομένων και του αριθμού των υλικών που απαιτούνται για το γέμισμα των κουτιών, μπορεί να προκύψουν διάφορα σφάλματα. Μπορούμε να χρησιμοποιήσουμε τα try / except για να ανιχνεύσουμε πιθανά σφάλματα και να διορθώσουμε ορισμένα προβλήματα, αλλά τι συμβαίνει όταν υπάρχουν πολλαπλά πιθανά σφάλματα που μπορεί να συναντήσετε σε μια μόνο λειτουργία; Για να το αντιμετωπίσουμε αυτό, μπορούμε να καθορίσουμε ποιες εξαιρέσεις προσπαθούμε να καταγράψουμε και να χρησιμοποιήσουμε πολλαπλές εξαιρέσεις.

Για να ξεκινήσετε, περπατήστε προς το χρυσό σημάδι X και στρέψτε προς την πόρτα, χρησιμοποιήστε τη συνάρτηση open() για να εισέλθετε στην αποθήκη. Μόλις μπείτε, περπατήστε προς το σκοτεινό σημάδι X και στρέψτε προς τα δεξιά ώστε να χρησιμοποιήσετε τη συνάρτηση read() και να ελέγξετε ποια υλικά και ποιες ποσότητες παραγγέλλονται στο σημείωμα στο τραπέζι. Πληροφορίες για τις σταθερές λιστών γράφονται στο σημείωμα, συμπεριλαμβανομένων των εφοδίων και των παραγγελιών τους. Όταν ολοκληρώσετε, περπατήστε προς το φωτεινό σημάδι X μέσα στην αποθήκη, στρέψτε προς το κουτί και πάρετε τη σταθερή λίστα pads με τα υλικά χρησιμοποιώντας τη συνάρτηση collect(), όπως εξής: player.collect(pads).

Μέσα στην αποθήκη υπάρχουν αποθέματα από "peroxide" και "isopropyl", περπατήστε και συλλέξτε όλα αυτά, στη συνέχεια κατευθυνθείτε προς τα έξω και περπατήστε προς το σκοτεινό σημάδι X πάνω από ένα μοβ χαλί. Στο μοβ χαλί, ενώ στρέφεστε προς το κουτί, χρησιμοποιήστε τη συνάρτηση collect() για να πάρετε το "water bottle", προχωρήστε προς το σκοτεινό σημάδι X πάνω από το κίτρινο χαλί και χρησιμοποιήστε τη συνάρτηση collect() για να πάρετε το "glass bottle".

Τώρα που τα αντικείμενα έχουν συλλεχθεί, ήρθε η ώρα να εκπληρώσουμε την παραγγελία και να τοποθετήσουμε όλα τα υλικά μέσα στα κουτιά της αποθήκης στα δεξιά. Για να το κάνουμε αυτό, θα αποθηκεύσουμε αρχικά το: "water bottle", "peroxide" και "isopropyl" μέσα σε μια λίστα που ονομάζεται supplies. Στα σκοτεινά σημάδια X πάνω από τα χαλιά red, green και blue θα χρησιμοποιήσουμε τα κουτιά για να αποθηκεύσουμε τα ιατρικά εφόδια. Για αυτό, θα δημιουργήσουμε τρεις λίστες: blue_crate = [], green_crate = [] και red_crate = [].

Πριν τοποθετήσετε όλα τα αντικείμενα, πρέπει να γεμίσετε όλες τις λίστες με τα υλικά. Για αυτό, θα χρησιμοποιήσουμε έναν βρόχο (loop) για να επαναλάβουμε τις λίστες και να τις συνδυάσουμε σε μια ενιαία λίστα. Αυτό θα τοποθετήσει όλα τα supplies στη λίστα και θα διαιρέσει τον αριθμό των αντικειμένων pads σύμφωνα με την order που αναγράφεται στο σημείωμα της αποθήκης.

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

Παρά το γεγονός αυτό, θα παρατηρήσετε ότι θα εμφανιστούν σφάλματα, παρόλο που όλα γίνονται σωστά και ο κώδικας είναι σωστός. Ωστόσο, το πρόβλημα είναι ότι η λίστα supplies έχει μόνο τρία (3) αντικείμενα, αλλά ο βρόχος εκτελείται πέντε (5) φορές προκαλώντας ένα Σφάλμα Δείκτη. Ταυτόχρονα, για τη λίστα pads όχι μόνο υπάρχουν μόνο τρία (3) αντικείμενα, αλλά επίσης μία από τις τιμές της παραγγελίας είναι 0, και οποιοσδήποτε αριθμός διαιρεθεί με 0 προκαλεί ένα Σφάλμα Διαίρεσης με το Μηδέν, διότι κανένας αριθμός δεν μπορεί να διαιρεθεί με 0 στα μαθηματικά.

Εδώ είναι που οι πολλαπλές εξαιρέσεις είναι χρήσιμες. Χρησιμοποιούμε τα try / except blocks για να καταγράψουμε τα σφάλματα και να επιτρέψουμε στον κώδικα να συνεχίσει. Δεδομένου ότι προκύπτουν δύο σφάλματα, πρέπει να εντοπίσουμε κάθε σφάλμα για να καταγράψουμε τις συγκεκριμένες εξαιρέσεις. Αυτό γίνεται επεκτείνοντας τα blocks except με τον εξής τρόπο: except IndexError: και except ZeroDivisionError:. Για παράδειγμα:

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)

Το Σφάλμα Δείκτη διορθώνεται με το να γεμίζονται οι ελλείποντες θέσεις στη λίστα με το "glass bottle" και το Σφάλμα Διαίρεσης με το Μηδέν αντιμετωπίζεται με την προσθήκη μιας τιμής 0 σε περίπτωση που συμβεί η παράνομη ενέργεια.

Κάντε αυτό για τις λίστες blue_crate = [], green_crate = [] και red_crate = []. Περπατήστε προς το σκοτεινό σημάδι X πάνω από τα χαλιά blue, green και red και χρησιμοποιήστε τη συνάρτηση place() για να αποθηκεύσετε τις λίστες στα αντίστοιχα κουτιά προκειμένου να ολοκληρώσετε το επίπεδο.

Βιβλίο Κώδικα