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

Οι γεννήτριες είναι μια ειδική κατηγορία συναρτήσεων στην Python που επιτρέπουν την επανάληψη μεγάλων συνόλων δεδομένων με πιο αποδοτικό τρόπο. Αντί να επιστρέφουν μια λίστα αποτελεσμάτων, οι γεννήτριες επιστρέφουν τιμές μία προς μία, χρησιμοποιώντας τη δήλωση `yield`. ## Πώς να δημιουργήσετε μια γεννήτρια Για να δημιουργήσετε μια γεννήτρια, απλά ορίστε μια συνάρτηση όπως θα κάνατε κανονικά αλλά χρησιμοποιήστε `yield` αντί για `return`. ```python # Παράδειγμα γεννήτριας που υπολογίζει τετράγωνα αριθμών def square_numbers(nums): for i in nums: yield i * i ``` ## Χρήση γεννήτριας Μπορείτε να περάσετε την γεννήτρια σε έναν for-loops για να επαναλάβετε στις τιμές: ```python nums = square_numbers([1, 2, 3, 4, 5]) for num in nums: print(num) ``` Αυτό θα εκτυπώσει το τετράγωνο κάθε αριθμού από τη λίστα. ## Πλεονεκτήματα γεννητριών - **Μνήμη**: Οι γεννήτριες δεν αποθηκεύουν όλες τις τιμές στη μνήμη, πράγμα που σημαίνει ότι μπορούν να χειριστούν πολύ μεγάλα σύνολα δεδομένων. - **Αποδοτικότητα**: Με τις γεννήτριες, οι τιμές υπολογίζονται μόνο όταν χρειάζονται, γεγονός που μπορεί να αυξήσει την αποδοτικότητα του προγράμματος.
Δημιουργία Γεννήτριας

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

Σε αυτή την άσκηση πρέπει να γεμίσετε μπουκάλια με γάλα από τις δεξαμενές στον στάβλο. Χρησιμοποιήστε μια γεννήτρια για να επαναλαμβάνετε τη διαδικασία γέμισης των μπουκαλιών και να διασφαλίζετε ότι οποιοδήποτε πλεόνασμα γάλακτος συλλέγεται από τις δεξαμενές.

Guide

Στόχος

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

Οι μηχανές που αποθηκεύουν το αγελαδινό γάλα είναι σχεδόν γεμάτες, πρέπει να εμφιαλώσετε το γάλα και να το αποθηκεύσετε πριν χαλάσει. Αυτή η διαδικασία μπορεί να είναι λίγο δύσκολη χρησιμοποιώντας κανονικά μέσα και η ποσότητα γάλακτος που μπορείτε να εξάγετε μπορεί να ποικίλλει λίγο. Ευτυχώς μπορείτε να χρησιμοποιήσετε γεννήτριες για να κάνετε αυτή τη διαδικασία ομαλή και απλή.

Υπάρχουν δύο (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 για να ολοκληρώσετε το επίπεδο.

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