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

Γεννήτες
Αποστολή δεδομένων σε έναν Generator

Στόχος

Συλλέξτε μαλλί και μετατρέψτε το σε νήμα χρησιμοποιώντας τις σπειροτροχούς στέλνοντας δεδομένα σε έναν γεννήτορα.

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

Πρώτα ορίστε έναν γεννήτορα ικανό να σπειρώνει νήμα, ονομάζοντάς τον spin(). Αυτός ο γεννήτορας πρέπει να ρυθμίζεται ώστε να χρησιμοποιεί εξωτερική είσοδο για να λειτουργήσει. Διαβάζει δεδομένα από το yield και τα τοποθετεί σε μια μεταβλητή, στη συνέχεια τροποποιεί το περιεχόμενό της αυξάνοντας το μήκος του σε κάθε κύκλο, και τέλος παράγει ένα αποτέλεσμα.

def spin(): cycle = 1 while True: cycle += 1 yarn = yield yarn = yarn * cycle yield player.speak("You've spun %d ft of yarn" % (yarn))

Επειδή αυτός είναι ένας γεννήτορας, η εντολή while() στο εσωτερικό μπορεί να παύσει και να τροποποιηθεί για να παραχθεί το επιθυμητό αποτέλεσμα. Αυτό το επίπεδο ελέγχου αποτελεί τον πυρήνα του τι είναι ένας γεννήτορας και πόσο χρήσιμος μπορεί να είναι κατά την επεξεργασία δεδομένων. Για να εισάγετε δεδομένα στον γεννήτορα, ορίστε τον και χρησιμοποιήστε τη μέθοδο send() για να του παρέχετε όποια δεδομένα επιθυμείτε, για παράδειγμα:

spindle = spin() # Δημιουργία ενός αντικειμένου του γεννήτορα next(spindle) # Εκτέλεση του γεννήτορα για ένα βήμα spindle.send(6) # Εισαγωγή δεδομένων στον γεννήτορα # Σε αυτή την περίπτωση στέλνετε τον αριθμό 6

Περπατήστε προς τα φώτα που επισημαίνουν με X δίπλα στα έγχρωμα χαλιά και αντιμετωπίστε τα πρόβατα. Υπάρχει μια σταθερά λεξικού με το όνομα sheep που περιέχει την τιμή του πόσο μαλλί μπορείτε να κλαδέψετε από κάθε πρόβατο. Χρησιμοποιήστε τη λειτουργία speak() με το λεξικό και το χρώμα του χαλιού πάνω στο οποίο στέκεστε, για να κλαδέψετε το μαλλί των προβάτων και να ελέγξετε πόσο έχετε μαζέψει. Για παράδειγμα: player.speak(sheep["green"]).

Υπάρχουν συνολικά τέσσερα (4) έγχρωμα χαλιά: "green", "red", "blue" και "orange". Μόλις κλαδέψετε τα πρόβατα, περπατήστε προς τα σκοτεινά σημάδια X δίπλα σε κάθε έγχρωμο χαλί όπου βρίσκονται οι σπειροτροχοί. Χρησιμοποιήστε το send() για να εισαγάγετε τον αριθμό των λιβρών μαλλιού που κλαδέψατε από κάθε πρόβατο στο αντίστοιχο χρώμα στον γεννήτορα.

Για παράδειγμα, αν κατά το κλάδεμα των προβάτων στο χαλί "green" κλαδέψετε 4 λίβρες μαλλί, μεταβείτε στο χαλί "green" δίπλα στις σπειροτροχούς και στείλτε αυτά τα δεδομένα στον γεννήτορα, ως εξής:

next(spindle) spindle.send( 4)

Κάντε αυτό για όλα τα τέσσερα (4) σκοτεινά σημάδια X πάνω στα έγχρωμα χαλιά για να ολοκληρώσετε το επίπεδο.

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