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

Dekoratoren
Verkettung von Dekoratoren

Ziel

Verziere das Dach mit farbigen Flaggen, indem du Dekoratoren verkettst.

Das Dach kann endlich frische Luft schnappen, nachdem es so lange in dieser Küche eingesperrt war – einige Linien haben keine Flaggen. Es wäre eine gute Idee, sie hier aufzustellen, allerdings kann das knifflig sein, da du verschiedene Flaggen benötigst, um eine Linie zu dekorieren. Das kannst du erreichen, indem du Dekoratoren verkettst.

Dekoratoren werden verkettet, indem man die @-Zeichen verdoppelt, das heißt, dass mehrere Dekoratoren an eine einzelne Funktion gehängt werden. Zum Beispiel ermöglicht dies, eine Funktion zwischen zwei Dekoratorfunktionen einzuklammern:

# Liste, um Flaggen zu einer Linie hinzuzufügen line = [] # Dekorator, der eine rote Flagge hinzufügt def red_flag(func): def add_flag(): line.append("red") player.speak("Two red flags added to the line") func() line.append("red") return add_flag # Dekorator, der eine blaue Flagge hinzufügt def blue_flag(func): def add_flag(): line.append("blue") player.speak("Two blue flags added to the line") func() line.append("blue") return add_flag # Dekorierte Funktion, die eine Linie und eine mittlere Flagge hinzufügt @blue_flag @red_flag def middle_green(): line.append("green") player.speak("A green flag has been added to the line")

Der obige Code zeigt eine Funktion mit verketteten Dekoratoren. Diese Dekoratoren werden in die Funktion eingewoben, sodass an den Rändern der Linie blaue Flaggen platziert werden, in der inneren Schicht rote Flaggen und schließlich in der Mitte eine grüne Flagge. Sie werden alle zu einer Liste namens line hinzugefügt – dies ist die Methode, mit der die Flaggen in der Linie aufgestellt werden.

Beginne, indem du zum goldenen X-Mark gehst und die read()-Funktion nutzt, um die auf dem Wegweiser angegebenen Anweisungen zu überprüfen. Dort erfährst du, welche Flaggen wo platziert werden sollen. Es gibt drei (3) verschiedene Arten farbiger Flaggen: "red", "green" und "blue". Jede Linie wird alle drei Flaggen haben, eine (1) in der Mitte der Linie, zwei (2) in der inneren Linie und zwei (2) in der äußeren Linie, was insgesamt fünf (5) Flaggen pro Linie ergibt – ähnlich wie die vorgefertigte Linie in der unteren linken Ecke der Karte.

Gehe zum hellen X-Mark und benutze die collect()-Funktion, um die "flags" in der Kiste einzusammeln. Gehe anschließend zu den dunklen X-Marken und beginne von links nach rechts, die Flaggen in der Reihenfolge zu platzieren, die in den zuvor gelesenen Anweisungen beschrieben wurde. Verwende hierfür die mittleren Funktionen, zum Beispiel erzeugt middle_green() eine Flaggensequenz wie folgt: ["blue", "red", "green" ,"red","blue" ]. Verwende dann die place()-Funktion, um die Linie mit der line-Liste zu platzieren, also: place(line).

Lösche zwischen jedem X-Mark die line-Liste mit der clear()-Funktion, also: line.clear(), damit du die Liste wiederverwenden kannst, ohne für jede Linie eine neue zu erstellen. Der letzte X-Mark ganz rechts erfordert eine benutzerdefinierte Funktion:

@ @ def middle_custom(): line.append( Insert append ) player.speak("%s flag has been added to the line" % ( insert flag ))

Verwende die beiden @-Symbole, um Dekoratoren der Funktion hinzuzufügen, und vervollständige anschließend den Aufruf zum Hinzufügen zur Liste sowie die Farbangabe der Flagge im String. Handle dabei gemäß den Anweisungen auf dem Schild, um das Level abzuschließen.

Codebuch