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

Διαχείριση Εξαιρέσεων
Τμήμα else

Στόχος

Πάρτε υλικά επισκευής και ταξινομήστε τα, στη συνέχεια απορρίψτε τα ανεπιθύμητα απόβλητα χρησιμοποιώντας την else δήλωση με διαχείριση εξαιρέσεων.

Κάποια υλικά επισκευής έχουν αποθηκευτεί στην κορυφή του κτιρίου, τα οποία χρησιμοποιούνται για την επισκευή της στέγης μετά από καταιγίδες ή γενική φθορά. Κάποια έχουν παραδοθεί πρόσφατα και εξακολουθούν να είναι αποθηκευμένα σε περιτυλίγματα και δοχεία, ενώ άλλα έχουν αποθηκευτεί για πολύ καιρό και έχουν ριχτεί μαζί με τα σκουπίδια. Θα ήταν καλή ιδέα να ταξινομηθούν σωστά τα υλικά, να αποθηκευτούν κατάλληλα και να απορριφθούν τα απορρίμματα και τα άχρηστα.

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

Για να ξεκινήσετε, πρέπει να εισέλθετε στην αποθήκη αριστερά και να κατευθυνθείτε προς το φωτεινό σήμα X. Αυτό το δωμάτιο αποθηκεύει κεραμίδια που χρησιμοποιούνται για την επισκευή των κεραμιδιών της στέγης. Χρησιμοποιήστε τη συνάρτηση collect() για να μαζέψετε τη σταθερή λίστα με το όνομα shingles.

Η λίστα πιθανώς περιέχει αρκετά άχρηστα υλικά, τα οποία πρέπει να αφαιρεθούν, επιπλέον αποθηκεύονται σε έξι (6) διαφορετικά διαμερίσματα, το καθένα με τη δική του ποσότητα υλικών. Πρέπει όλα τα υλικά να συγκεντρωθούν σε μια ενιαία στοίβα. Δημιουργήστε μια μεταβλητή με το όνομα red_storage για να αποθηκεύσετε όλα τα υλικά και μια λίστα με το όνομα junk ώστε να τοποθετήσετε όλα τα απόβλητα.

Κανονικά θα αναγνωρίζατε τα υλικά, θα τα μετατρέπατε σε ακέραιους αριθμούς με τη χρήση της int() και θα τα αποθηκεύατε σε μια μεταβλητή για μεταγενέστερη χρήση. Όμως, όπως πιθανόν να περιμένετε, δεδομένων των προηγούμενων επιπέδων του κεφαλαίου και του θέματος αυτής της άσκησης, ένα σφάλμα είναι αναπόφευκτο.

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

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

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

Με αυτό το red_storage έχει πλέον συγκεντρωθεί όλο το χρησιμοποιήσιμο κεραμίδιο, ενώ όλο το σκουπίδι έχει προστεθεί στη λίστα junk. Περπατήστε προς το χρυσό σήμα X στην αριστερή αποθήκη στην οποία βρίσκεστε και χρησιμοποιήστε τη συνάρτηση write() για να καταγράψετε τον αριθμό των κεραμιδιών για αποθήκευση, όπως το εξής: await player.write("There are %s shingles ready for use in storage" % (red_storage)). Στη συνέχεια, περπατήστε προς το σκοτεινό σήμα X πάνω από το κόκκινο χαλί και χρησιμοποιήστε τη συνάρτηση place() για να αποθηκεύσετε τη μεταβλητή red_storage στο κιβώτιο.

Μόλις ολοκληρώσετε αυτήν την εργασία, μεταβείτε στην αποθήκη στα δεξιά. Αυτό το δωμάτιο αποθηκεύει ξύλινες σανίδες και υλικά που χρειάζονται για την επισκευή των κατασκευών της στέγης και του τοίχου. Κατευθυνθείτε προς το σκοτεινό σήμα X πάνω από το πράσινο χαλί και χρησιμοποιήστε τη συνάρτηση collect() για να πάρετε μια σταθερή λίστα με το όνομα planks_set από το κιβώτιο. Αυτή η λίστα περιέχει σανίδες που έχουν ήδη αφαιρεθεί από κάθε απόβλημα. Περπατήστε προς το φωτεινό σήμα X δίπλα της και χρησιμοποιήστε ξανά τη συνάρτηση collect() για να πάρετε μια άλλη σταθερή λίστα με το όνομα shipment. Αυτές είναι ξύλινες σανίδες που έχουν μεταφερθεί πρόσφατα και εξακολουθούν να περιέχουν κάποια απόβλητα.

Όπως και στο προηγούμενο δωμάτιο, η λίστα shipment πιθανώς περιέχει αρκετά άχρηστα υλικά που πρέπει να αφαιρεθούν. Όπως και πριν, τα υλικά είναι αποθηκευμένα σε έξι (6) διαφορετικά διαμερίσματα, το καθένα με τη δική του ποσότητα υλικών. Δημιουργήστε μια μεταβλητή με το όνομα blue_storage για να συγκεντρώσετε όλα τα υλικά σε μια ενιαία στοίβα. Όπως προηγουμένως, τα απόβλητα θα αποθηκευτούν στη λίστα junk.

Για τις σανίδες θα μετατρέψουμε και θα προσθέσουμε όλα τα χρήσιμα υλικά της λίστας shipment στη λίστα planks_set, και στη συνέχεια θα τα συγκεντρώσουμε όλα, χρησιμοποιώντας τη int(), στη μεταβλητή blue_storage. Ωστόσο, όπως και πριν, είναι αναμενόμενο να παρουσιαστούν σφάλματα.

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

Αυτή τη φορά μπορείτε να περιμένετε ένα Type Error, που συμβαίνει όταν προσπαθείτε να προσθέσετε μαζί αριθμούς και συμβολοσειρές. Αυτό μπορεί να αντιμετωπιστεί χρησιμοποιώντας ξανά τα μπλοκ κώδικα try / except και else. Το μπλοκ try προσπαθεί να προσθέσει τις τιμές, το μπλοκ except φιλτράρει τα άχρηστα στοιχεία από τη λίστα και η δήλωση else προσθέτει τις σανίδες στη μεταβλητή 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])

Τώρα που η μεταβλητή blue_storage είναι πλήρως συγκεντρωμένη, μπορείτε να καταγράψετε και να αποθηκεύσετε όλες τις ξύλινες σανίδες. Περπατήστε προς το χρυσό σήμα X στην αποθήκη στα δεξιά, στραφείτε προς το τραπέζι και χρησιμοποιήστε τη συνάρτηση write() για να καταγράψετε τα υλικά που συγκεντρώσατε, όπως το εξής: await player.write("There are %s planks ready for use in storage" % (blue_storage))

Για να ολοκληρώσετε το επίπεδο, περπατήστε προς το σκοτεινό σήμα X πάνω από το μπλε χαλί και χρησιμοποιήστε τη συνάρτηση place() για να αποθηκεύσετε τη μεταβλητή blue_storage στο κιβώτιο. Στη συνέχεια, περπατήστε προς το σκοτεινό σήμα X πάνω από το μωβ χαλί στο κεντρικό δωμάτιο και χρησιμοποιήστε τη συνάρτηση place() για να απορρίψετε τη λίστα junk στην κατασκευή απορριμμάτων, ολοκληρώνοντας την εργασία σας.

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