Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Διακοσμητές
Πιο σύνθετοι Διακοσμητές
Στόχος
Τοποθετήστε τις πίτσες στον φούρνο στις σωστές θερμοκρασίες και ετοιμάστε σαλάτες χρησιμοποιώντας διακοσμητές με παραμέτρους.
Τώρα που οι πίτσες έχουν ήδη προετοιμαστεί, ήρθε η ώρα να τις ψήσουμε στους φούρνους. Μόλις ολοκληρωθεί αυτό, θα πρέπει να ετοιμάσουμε σαλάτες για να συνοδεύσουν τις πίτσες αφού είναι έτοιμες. Μπορείτε να ολοκληρώσετε αυτές τις εργασίες χρησιμοποιώντας διακοσμητές με παραμέτρους, παρόμοια με τις προσαρμοσμένες συναρτήσεις, όπου μπορείτε επίσης να περάσετε παραμέτρους μέσω των διακοσμητών σας.
Οι πίτσες πρέπει να τοποθετηθούν στον φούρνο, αλλά πρώτα πρέπει να συλλέξετε περισσότερα firewood στο κάτω αριστερό μέρος του χάρτη. Μόλις συλλεχθούν, μαζέψτε το καλάθι στον πάγκο δίπλα στον αριστερό φούρνο, το οποίο περιέχει pizza για να ψηθεί στους φούρνους.
def place_oven(func):
def check(temp):
if temp < 450:
player.speak("Oven is not hot enough")
player.open()
player.place("firewood")
player.close()
return
return func(temp)
return check
@place_oven
def bake_pizza(temp):
player.open()
player.place("pizza")
player.close()
player.speak("I am baking Pizza at %d degrees" % (temp))
Περπατήστε μέχρι τα φωτεινά σημάδια X και χρησιμοποιήστε τη συνάρτηση read() ενώ στρίζεστε προς τον φούρνο, για να ταυτοποιήσετε τη θερμοκρασία του φούρνου. Ακολουθήστε αυτό γράφοντας τη διακοσμημένη συνάρτηση bake_pizza() και προσθέτοντας τη θερμοκρασία που διαβάσατε ως παράμετρο, για παράδειγμα: bake_pizza(450).
Ενώ τοποθετείτε τις πίτσες και το firewood στους φούρνους, σταματήστε στο χρυσό σημάδι X και στραφείτε προς την ντουλάπα. Εδώ μπορείτε να συλλέξετε τα συστατικά για τις σαλάτες. Αυτή τη στιγμή, τα συστατικά της σαλάτας αποθηκεύονται σε μια εμφωλευμένη λίστα που απεικονίζεται στον επεξεργαστή κώδικα, ωστόσο αυτή η λίστα είναι ακατάστατη και θα ήταν προς το συμφέρον σας να έχετε τα αντικείμενα αποθηκευμένα σε μια σωστή λίστα για να τα χρησιμοποιήσετε για τις σαλάτες σας.
cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]
Δημιουργήστε μια λίστα με όνομα ingredients και χρησιμοποιήστε List Comprehension για να «εξισώσετε» την εμφωλευμένη λίστα. Αυτή είναι η διαδικασία κατά την οποία αφαιρούνται οι υπολίστες από την εμφωλευμένη λίστα, ώστε όλα τα στοιχεία να συγκεντρώνονται σε μία λίστα αντί για πολλές μικρότερες. Αφού η λίστα έχει εξισωθεί, χρησιμοποιήστε τη συνάρτηση speak() με τη λίστα για να επαληθεύσετε τα συστατικά που πρόκειται να χρησιμοποιήσετε.
Μετά την τοποθέτηση όλων των απαραίτητων αντικειμένων στους φούρνους και την επεξεργασία της λίστας ingredients, περπατήστε προς τα σκοτεινά σημάδια X για να δημιουργήσετε τις σαλάτες. Στον επεξεργαστή, μια συνάρτηση και ένας διακοσμητής έχουν οριστεί, αυτή τη φορά δεν είναι συνδεδεμένοι και πρέπει να δηλωθούν χειροκίνητα, για παράδειγμα: salad = add_toppings(toss_salad("ranch","carrot")). Αυτό το σύνολο συναρτήσεων δέχεται δύο (2) παραμέτρους: dressing και vegetable.
def add_toppings(func):
def add(dressing, vegetable):
player.place(dressing)
player.place(vegetable)
func(dressing, vegetable)
return add
@add_toppings
def toss_salad(dressing, vegetable):
player.combine("lettuce", dressing, vegetable)
player.speak("I am preparing salad with %s dressing and %s"
% (dressing, vegetable))
Κάθε σκοτεινό σημάδι X βρίσκεται πάνω σε ένα πολύχρωμο χαλί, και σε καθένα πρέπει να δημιουργηθεί μια διαφορετική σαλάτα χρησιμοποιώντας τα συστατικά που πήρατε από την ντουλάπα. Στο κίτρινο χαλί, δημιουργήστε μια σαλάτα χρησιμοποιώντας: cesar και cheese, στο πράσινο χαλί δημιουργήστε μια σαλάτα χρησιμοποιώντας: oil και tomato, και στο μπλε χαλί δημιουργήστε μια σαλάτα χρησιμοποιώντας: ranch και carrot.
Μόλις συναρμολογηθούν όλες οι τρεις (3) σαλάτες χρησιμοποιώντας τη διακοσμημένη συνάρτηση toss_salad(dressing, vegetable) σε αυτή τη μορφή, το επίπεδο θα είναι ολοκληρωμένο.