Coding for KidsCoding for Kids
Kreative LevelHerausforderungenLehrerhandbuch
Für Funktionen abstimmen
Fortgeschrittener Python-Entwicklungskurs
Kapitel
>
Stufe

Erweiterte Funktionen
Closures

Ziel

Regeln Sie die Wasserversorgung auf dem Bauernhof, indem Sie Closures einrichten und verwenden.

Es gibt vier Wassertanks, die zur Bewässerung der umliegenden Felder bestimmt sind. Es wird Zeit, sie umzustellen, um sicherzustellen, dass die richtige Menge Wasser an die richtigen Stellen verteilt wird. Um dies zu erreichen, können wir den Aufwand erheblich durch den Einsatz von Closures reduzieren.

Closures sind verschachtelte Funktionen, die dazu entwickelt wurden, Daten zu kapseln. Dadurch wird die Anzahl der benötigten Variablen reduziert und die Daten werden innerhalb der Funktion verborgen, sodass sie von außen nicht manipuliert werden können – anders gesagt, die Funktion wird "geschlossen".

Um das Wasser in den Tanks zu regulieren, werden wir eine verschachtelte Funktion erstellen, die als Multiplikator fungiert. Diese Funktion arbeitet ähnlich wie eine Schleife: Die äußere Funktion namens multiplier_of() hat ein Argument, das mit dem Argument ihrer inneren Funktion namens multiplier() multipliziert wird.

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

Nachdem sie eingerichtet wurde, müssen wir die Funktion durch die Verwendung von Closures abschließen. Dadurch wird der Zugriff auf ihre Werte verhindert und ihre Verwendung gesichert.

# 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]

Das oben definierte Closure heißt multiply_by_2() und verwendet die von uns erstellte verschachtelte Funktion mit einem festgelegten Argument, nämlich 2, was die Zahl ist, mit der das Closure multipliziert. Folglich wird jede Zahl, die wir als Argument hinzufügen, mit zwei (2) multipliziert, und diese Eigenschaft kann aufgrund der Kapselung nicht verändert werden.

Kommen wir zur Regulierung der Wassertanks: Richten Sie drei (3) Closures ein: multiply_by_2, multiply_by_3 und multiply_by_5. Richten Sie jedes von ihnen manuell mit demselben Format ein, das im zuvor bereitgestellten Beispiel verwendet wurde, also so: multiply_by_2 = multiplier_of(2).

Auf diesem Level gibt es eine Dictionary-Konstante namens tanks, die als Schlüssel sechs (6) Farben enthält: “red", “blue", “orange", “purple", “yellow" und “green". Jeder Schlüssel enthält eine Zahl, die angibt, wie viel Wasser durch die Seite eines Tanks fließt. Diese Zahl wird verwendet, um den Tank mittels der zuvor besprochenen "multiply_by"-Closures zu regulieren.

Um dies zu ermöglichen, wird im Editor eine Funktion namens regulate_water() eingerichtet, die zwei Argumente entgegennimmt: die Farbe, die den oben aufgeführten Schlüsseln entspricht, und den Multiplikator, der das zu verwendende Multiplikator-Closure darstellt. Ein Beispiel für die Verwendung der Funktion ist wie folgt: regulate_water(“red" , multiply_by_2 ).

Gehen Sie zu den dunklen X-Markierungen über den farbigen Teppichen und stellen Sie sich den Tanks, verwenden Sie die regulate_water()-Funktion und geben Sie die Farbe des Teppichs als erstes Argument und das entsprechende Multiplikator-Closure als zweites Argument ein. Die Multiplikatoren, die auf jedem farbigen Teppich verwendet werden sollen, sind wie folgt:

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

Regulieren Sie das Wasser an jeder Seite der Tanks, um das Level abzuschließen.

Codebuch