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

Προηγμένες Συναρτήσεις
Κλεισίματα

Στόχος

Ρυθμίστε την παροχή νερού στην φάρμα δημιουργώντας και χρησιμοποιώντας closures.

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

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

Για να ρυθμίσουμε το νερό στις δεξαμενές, θα δημιουργήσουμε μια εμφωλευμένη συνάρτηση που λειτουργεί ως πολλαπλασιαστής. Αυτή η συνάρτηση λειτουργεί με τον ίδιο τρόπο όπως ένας βρόχος, όπου η εξωτερική συνάρτηση με όνομα multiplier_of() έχει ένα όρισμα που πολλαπλασιάζεται με το όρισμα της εσωτερικής συνάρτησης με όνομα multiplier().

# Nested Function def multiplier_of(n): def multiplier(number): return number*n return multiplier

Μόλις ρυθμιστεί, πρέπει να εγκλωβίσουμε τη συνάρτηση δημιουργώντας closures, αποτρέποντας έτσι την πρόσβαση στις τιμές τους και ενισχύοντας τη χρήση τους.

# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]

Το παραπάνω closure ονομάζεται multiply_by_2() και χρησιμοποιεί την εμφωλευμένη συνάρτηση που δημιουργήσαμε με καθορισμένο όρισμα, δηλαδή το 2, που είναι ο αριθμός με τον οποίο έχει οριστεί να πολλαπλασιάζει το closure. Ως αποτέλεσμα, κάθε αριθμός που προσθέτουμε ως όρισμα θα πολλαπλασιαστεί επί δύο (2) και αυτή η ιδιότητα δεν μπορεί να αλλάξει λόγω του εγκλωβισμού του.

Προχωρώντας στη ρύθμιση των δεξαμενών, δημιουργήστε τρία (3) closures: multiply_by_2, multiply_by_3 και multiply_by_5. Ορίστε το καθένα χειροκίνητα χρησιμοποιώντας το ίδιο φορμά που χρησιμοποιήθηκε στο προηγούμενο παράδειγμα, όπως αυτό: multiply_by_2 = multiplier_of(2).

Υπάρχει μια σταθερά λεξικού σε αυτό το επίπεδο με όνομα tanks, η οποία ως δείκτης περιέχει έξι (6) χρώματα: “red", “blue", “orange", “purple", “yellow" και “green". Κάθε δείκτης περιέχει έναν αριθμό που αντιπροσωπεύει την ποσότητα νερού που ρέει από την πλευρά μιας δεξαμενής, ο οποίος θα χρησιμοποιηθεί για τον έλεγχο της δεξαμενής με τη χρήση των closures multiply_by που συζητήθηκαν προηγουμένως.

Για να διευκολυνθεί αυτό, θα δημιουργηθεί μια συνάρτηση στον επεξεργαστή με όνομα regulate_water(), η οποία παίρνει δύο ορίσματα: το χρώμα, που αντιπροσωπεύει τους παραπάνω δείκτες, και τον πολλαπλασιαστή, που αντιπροσωπεύει το closure πολλαπλασιαστή που θα χρησιμοποιηθεί. Ένα παράδειγμα χρήσης της συνάρτησης είναι το εξής: regulate_water(“red" , multiply_by_2 ).

Περπατήστε προς τα σκοτεινά X που σημειώνουν πάνω σε πολύχρωμα χαλιά και αντιμετωπίστε τις δεξαμενές. Χρησιμοποιήστε τη συνάρτηση regulate_water() και ορίστε το χρώμα του χαλιού ως το πρώτο όρισμα και το κατάλληλο closure πολλαπλασιαστή ως το δεύτερο. Οι πολλαπλασιαστές που θα χρησιμοποιηθούν σε κάθε πολύχρωμο χαλί είναι οι εξής:

multiply_by_2 - "red" and "green" multiply_by_3 - "blue" and "purple" multiply_by_5 - "orange" and "yellow"

Ρυθμίστε το νερό σε κάθε πλευρά της δεξαμενής για να ολοκληρώσετε το επίπεδο.

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