Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Γεννήτορες
Χειροκίνητη προώθηση μιας γεννήτριας
Στόχος
Χρησιμοποιήστε τον generator σε μια χειροκίνητη ακολουθία για να συνθέσετε και να παράγετε υλικά για να φτιάξετε ψωμί.
Μπροστά υπάρχει μια εγκατάσταση όπου μπορείτε να συνθέσετε λίγη ζύμη ψωμιού χρησιμοποιώντας τις πρέσες. Κανονικά θα χρησιμοποιούσατε τη συνάρτηση combine() για να ενώσετε τα υλικά, αλλά εδώ δεν ισχύει αυτό, τα υλικά πρέπει να υποστούν πρώτα επεξεργασία πριν από τη συνένωση τους.
Για αυτήν την εργασία, μπορούμε να χρησιμοποιήσουμε generators, καθώς μπορούν να προσαρμοστούν ώστε να παράγουν διαφορετικούς τύπους αρχείων, καθώς και να καλούνται με εντολή αντί να εξάγουν αυτόματα τιμές όπως οι συναρτήσεις και τα loops. Δείτε ένα παράδειγμα:
def bread():
yield 5
yield "grain"
Ο παραπάνω κώδικας περιέχει έναν generator με δύο δηλώσεις yield, όπου η μία παράγει έναν πραγματικό αριθμό και η άλλη μια συμβολοσειρά. Μπορούμε να παράγουμε τις τιμές του generator όποτε θέλουμε χρησιμοποιώντας τη συνάρτηση next(). Έτσι:
recipe = bread() # Κάνει setup τον Generator player.place(next(recipe)) # Καλείται η πρώτη τιμή player.collect(next(recipe)) # Καλείται η δεύτερη τιμή
Στο παραπάνω παράδειγμα, ο generator έχει ρυθμιστεί και η συνάρτηση next() χρησιμοποιείται για να καλέσει την πρώτη τιμή yield για χρήση στη συνάρτηση place(). Αυτό επαναλαμβάνεται για τη δεύτερη τιμή, η οποία χρησιμοποιείται αντίστοιχα στη συνάρτηση collect(). Αυτό καθιστά εύκολη την κλήση τιμών διαφορετικών τύπων σε μια ακολουθία χωρίς την ανάγκη χρήσης πολλαπλών λιστών ή μεταβλητών.
Ένας generator με το όνομα bread() θα οριστεί στον επεξεργαστή κώδικα αλλά θα απαιτεί αριθμούς ποσότητας για κάθε συστατικό, προκειμένου να επεξεργαστείτε τη ζύμη του ψωμιού. Αυτοί οι αριθμοί είναι γραμμένοι στο πινακίδιο δίπλα στην εγκατάσταση. Ρυθμίστε τον generator για χρήση αναφερόμενοι σε αυτόν, όπως παρακάτω: recipe = bread()
Πρώτα, περπατήστε προς το φωτεινό σημάδι X δίπλα στην δεξαμενή γάλακτος και χρησιμοποιήστε τη συνάρτηση player.collect(next(recipe)) για να συλλέξετε το τελευταίο γάλα στην δεξαμενή, χρησιμοποιώντας τη συνάρτηση next() του generator, όπως αυτό: player.collect(next(recipe)). Στη συνέχεια, περπατήστε προς το χρυσό σημάδι X δίπλα στο πινακίδιο και χρησιμοποιήστε τη συνάρτηση speak() για να λάβετε τους αριθμούς ποσότητας που χρειάζονται ώστε ο generator να παράγει το ψωμί και να τους καταγράψετε στον generator. Τα δεδομένα αποθηκεύονται σε μια σταθερά με το όνομα "sign" και θα κληθούν ως εξής: player.speak(sign).
Μόλις εισαχθούν όλες οι τιμές στον generator, μπείτε στην εγκατάσταση και χρησιμοποιήστε player.place(next(recipe)) στα σκοτεινά σημάδια X και player.collect(next(recipe)) στα φωτεινά σημάδια X για να ολοκληρώσετε το επίπεδο.