Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Διακοσμητές
Βελτιστοποίηση Διακοσμητών
Στόχος
Συλλέξτε συστατικά και ετοιμάστε διαφορετικούς τύπους πίτσας χρησιμοποιώντας διακοσμητές.
Τώρα που έχουν εγκατασταθεί οι φούρνοι, ήρθε η ώρα να ετοιμάσουμε μερικές πίτσες για να τις ψήσουμε αργότερα. Τώρα που γνωρίζουμε πώς να χρησιμοποιούμε διακοσμητές, μπορούμε να τους βελτιστοποιήσουμε λίγο. Χρησιμοποιώντας το σύμβολο @ στον κώδικα, ακολουθούμενο από το όνομα του διακοσμητή, και τοποθετώντας αυτόν τον κώδικα πάνω από τη διακοσμημένη συνάρτηση, μπορούμε αυτόματα να προσθέσουμε έναν διακοσμητή χωρίς να χρησιμοποιήσουμε μεταβλητή. Για παράδειγμα:
# Decorator
def create_pizza(func):
def set():
pizza = ["dough","red sauce","cheese"]
player.combine(pizza)
func()
return set
# Function being decorated with @
@create_pizza
def peperoni_pizza():
player.place("Peperoni")
player.speak("Peperoni Pizza has been prepped")
# Using pre-decorated function
peperoni_pizza()
Αξίζει να σημειωθεί ότι αυτή η τεχνική απλοποιεί τη διαδικασία έχοντας μια συνάρτηση προδιακοσμημένη πριν από τη χρήση, ωστόσο μερικές φορές μπορεί να θέλετε ακόμα να αναθέσετε έναν διακοσμητή σε μια μεταβλητή για μεγαλύτερη ευελιξία.
Για αρχή, περπατήστε προς το χρυσό σήμα X και πιάστε τα συστατικά για να φτιάξετε πίτσα. Τα συστατικά για την παρασκευή της πίτσας είναι: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" και "pineapple". Τα περισσότερα από αυτά τα συστατικά βρίσκονται μέσα σε έναν πίνακα που αντιπροσωπεύει τα ράφια της αποθήκης, χρησιμοποιήστε List Comprehensions για να αποθηκεύσετε όλα τα αντικείμενα που θέλετε να πάρετε σε μια λίστα.
shelves = [ ["cheese", "dough", "jar"], ["jar", "red sauce", "jar"], ["peperoni", "jar" , "ham"], ["olive", "pepper", "onions"] ] ingredients = [ item for row in shelves for item in row if not "jar" in item]
Στον παραπάνω κώδικα, η λίστα ingredients διασχίζει τις γραμμές του πίνακα που ονομάζεται shelves και αφαιρεί όλα τα στοιχεία με το όνομα "jar". Αυτή η List Comprehension μας εξοικονομεί χρόνο αποφεύγοντας την ανάγκη να προσθέσουμε όλα τα αντικείμενα χειροκίνητα. Χρησιμοποιήστε τη συνάρτηση speak() με τη λίστα συστατικών για να επαληθεύσετε τα αντικείμενα που θα χρησιμοποιήσετε.
Μόλις συλλεχθούν όλα τα συστατικά εκτός από το "pineapple", οι συναρτήσεις για την παρασκευή των πίτσας χρειάζονται τις συνάρτησεις place() να προστεθούν για να ολοκληρωθεί η λειτουργικότητά τους. Αυτές οι συναρτήσεις έχουν ρυθμιστεί στον επεξεργαστή κώδικα και ονομάζονται: peperoni_pizza() που απαιτεί: "peperoni", vegetable_pizza() που απαιτεί: "olive", "pepper", "onion", και pineapple_pizza() που απαιτεί: "ham" και "pineapple".
Περπατήστε προς τα σκοτεινά σήματα X και χρησιμοποιήστε τις διακοσμημένες συναρτήσεις για να ετοιμάσετε τις πίτσες. Σε σήματα X με κόκκινα χαλιά δημιουργήστε peperoni_pizza(), σε πράσινα χαλιά δημιουργήστε vegetable_pizza() και σε κίτρινα χαλιά δημιουργήστε pineapple_pizza(). Καθώς κατευθύνεστε προς το κίτρινο χαλί, σταματήστε στο ανοιχτό σήμα X, στραφείτε προς την ντουλάπα και χρησιμοποιήστε τη συνάρτηση collect() για να πάρετε το "pineapple". Προετοιμάστε όλες τις πίτσες για να ολοκληρώσετε επιτυχώς το επίπεδο.