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

Dekoratoren
Komplexere Dekoratoren

Ziel

Stelle die Pizzas in den Ofen bei den korrekten Temperaturen und bereite Salate mithilfe von Decorators mit Argumenten vor.

Jetzt, da die Pizzas bereits vorbereitet sind, ist es Zeit, sie in den Öfen zu backen. Sobald das erledigt ist, sollten wir Salate zubereiten, die zu den Pizzas passen, nachdem diese fertig gebacken sind. Diese Aufgaben kannst du mithilfe von Decorators mit Argumenten umsetzen – ähnlich wie bei benutzerdefinierten Funktionen, kannst du auch Argumente durch deine Decorators weiterreichen.

Die Pizzas müssen in den Ofen gelegt werden, aber zuerst musst du mehr firewood im unteren linken Bereich der Karte einsammeln. Sobald du das gesammelt hast, nimm den Korb am Tresen neben dem linken Ofen. Dieser Korb enthält pizza, die in den Öfen gebacken werden soll.

Es gibt eine Funktion, und ihr Decorator ist im Code-Editor eingerichtet. Die Funktion wird verwendet, um die pizza in den Ofen zu legen und zu backen. Der Decorator überprüft, ob der Ofen die richtige Temperatur hat, und falls dies nicht der Fall ist, wird stattdessen firewood platziert.

def place_oven(func): def check(temp): if temp < 450: player.speak("Oven is not hot enough") player.open() player.place("firewood") player.close() return return func(temp) return check @place_oven def bake_pizza(temp): player.open() player.place("pizza") player.close() player.speak("I am baking Pizza at %d degrees" % (temp))

Gehe zu den hell markierten X-Symbolen und benutze die read()-Funktion, während du dem Ofen zugewandt bist, um die Temperatur des Ofens zu ermitteln. Schreibe anschließend die dekorierte Funktion bake_pizza() und füge die gelesene Temperatur als Argument hinzu, zum Beispiel: bake_pizza(450).

Während du die Pizzas und das Feuerholz in den Öfen platzierst, halte an dem goldenen X-Symbol an und richte dich zum Schrank. Hier kannst du die Zutaten sammeln, um Salate zuzubereiten. Derzeit sind die Salatzutaten in einer verschachtelten Liste gespeichert, die im Code-Editor abgebildet wird. Diese Liste ist jedoch unübersichtlich, und es wäre in deinem besten Interesse, die Elemente in einer ordentlichen Liste zu speichern, um sie für deine Salate verwenden zu können.

cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]

Erstelle eine Liste namens ingredients und benutze List Comprehension, um die verschachtelte Liste zu "flatten". Dies bedeutet, die Unterlisten aus der verschachtelten Liste zu entfernen, sodass alle Elemente in einer einzigen Liste zusammengeführt werden, anstatt in mehreren kleineren Listen. Nachdem die Liste flach gemacht wurde, benutze die speak()-Funktion mit der Liste, um die Zutaten zu verifizieren, die du verwenden wirst.

Nachdem alle notwendigen Elemente in den Öfen platziert und die ingredients-Liste erstellt wurde, gehe zu den dunkel markierten X-Symbolen, um die Salate zuzubereiten. Im Editor ist eine Funktion und ein Decorator eingerichtet, die diesmal nicht verbunden sind und manuell deklariert werden müssen, zum Beispiel: salad = add_toppings(toss_salad("ranch","carrot")). Diese Funktionen nehmen zwei (2) Argumente: dressing und vegetable.

def add_toppings(func): def add(dressing, vegetable): player.place(dressing) player.place(vegetable) func(dressing, vegetable) return add @add_toppings def toss_salad(dressing, vegetable): player.combine("lettuce", dressing, vegetable) player.speak("I am preparing salad with %s dressing and %s" % (dressing, vegetable))

Jedes dunkel markierte X-Symbol befindet sich auf einem farbigen Teppich. Jeder Teppich erfordert einen anderen Salat, der mit den Zutaten, die du aus dem Schrank geholt hast, zubereitet werden muss. Auf dem gelben Teppich erstelle einen Salat mit: cesar und cheese, auf dem grünen Teppich erstelle einen Salat mit: oil und tomato, und auf dem blauen Teppich erstelle einen Salat mit: ranch und carrot.

Sobald alle drei (3) Salate mithilfe der dekorierten Funktion toss_salad(dressing, vegetable) in diesem Format zusammengestellt wurden, ist das Level abgeschlossen.

Codebuch