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

Στόχος
Γεμίστε μπουκάλια με γάλα αντλώντας τις δεξαμενές γάλακτος χρησιμοποιώντας γεννήτριες.
Οι μηχανές που αποθηκεύουν το αγελαδινό γάλα είναι σχεδόν γεμάτες, πρέπει να εμφιαλώσετε το γάλα και να το αποθηκεύσετε πριν χαλάσει. Αυτή η διαδικασία μπορεί να είναι λίγο δύσκολη χρησιμοποιώντας κανονικά μέσα και η ποσότητα γάλακτος που μπορείτε να εξάγετε μπορεί να ποικίλλει λίγο. Ευτυχώς μπορείτε να χρησιμοποιήσετε γεννήτριες για να κάνετε αυτή τη διαδικασία ομαλή και απλή.
Υπάρχουν δύο (2) δεξαμενές με γάλα που πρέπει να αντληθεί και να εμφιαλωθεί το γάλα τους. Κάθε μηχανή έχει διαμερίσματα που αποθηκεύουν γάλα, αυτά αντιπροσωπεύονται από συναρτήσεις λίστας με ονόματα: tank_a και tank_b. Επιπλέον, κάθε δεξαμενή τείνει να έχει ένα πλεόνασμα που μπορείτε να συλλέξετε.
Οι γεννήτριες ακολουθούν την ίδια σύνταξη με τις συναρτήσεις αλλά θα χρησιμοποιούν yield αντί return για την έξοδο τους. Ορίστε μια γεννήτρια με όνομα fill() και ορίστε την με το όρισμα list, εκεί θα εισάγετε τους σταθερούς που αναφέρονται στην παραπάνω παράγραφο.
def fill(list):
for x in range(3):
yield list[x]
yield 5
Η γεννήτρια διαβάζει τα δεδομένα από τα τρία (3) πεδία στις σταθερές της λίστας, που αντιπροσωπεύονται από τα διαμερίσματα στη μηχανή, και προσθέτει ένα πλεόνασμα στο τέλος που είναι πέντε (5).
Συλλέξτε το αντικείμενο καλαθιού στο πεδίο για να αποκτήσετε πρόσβαση στα μπουκάλια που είναι απαραίτητα για την πλήρωση και περπατήστε στα δύο (2) X σημεία για να συλλέξετε το γάλα χρησιμοποιώντας ένα βρόχο for.
Χάρη στη δήλωση yield οι τιμές που παράγονται από τη γεννήτρια μπορούν να διαβαστούν απευθείας από ένα βρόχο for. Ορίστε έναν που χρησιμοποιεί τη collect() συνάρτηση για να αποκτήσετε το "γάλα" από τη μηχανή. Ακολουθήστε το με τη χρήση της speak() για να ελέγξετε πόσο γάλα έχει αποθηκευτεί κάθε μπουκάλι. Για παράδειγμα:
for bottles in fill(tank_a): player.collect("milk") player.speak("%d πίντες γάλακτος συλλέχθηκαν" % (bottles))
Γράψτε και χρησιμοποιήστε αυτόν τον βρόχο for και στα δύο X σημεία, στο φωτεινό X σημείο χρησιμοποιήστε το όρισμα tank_a και στο σκοτεινό X σημείο χρησιμοποιήστε το όρισμα tank_b για να ολοκληρώσετε το επίπεδο.