Coding for KidsCoding for Kids
Poziomy KreatywneWyzwaniaPrzewodnik dla Nauczycieli
Głosuj na funkcje
Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom

Dekoratory
Bardziej złożone dekoratory

Cel

Ustaw pizze w piekarnikach w odpowiednich temperaturach i przygotuj sałatki przy użyciu dekoratorów z argumentami.

Teraz, gdy pizze są już przygotowane, czas je upiec w piekarnikach. Gdy to zostanie wykonane, powinniśmy przygotować sałatki, które będą podawane razem z pizzami. Możesz wykonać te zadania, korzystając z dekoratorów z argumentami; podobnie jak w funkcjach niestandardowych, możesz również przekazywać argumenty przez dekoratory.

Pizze muszą zostać umieszczone w piekarniku, ale najpierw musisz zebrać więcej firewood w lewym dolnym rogu mapy. Po zebraniu, weź kosz przy ladzie obok lewego piekarnika - ten kosz zawiera pizza, które mają być pieczone w piekarnikach.

W edytorze kodu znajduje się funkcja oraz jej dekorator. Funkcja ta służy do umieszczania i pieczenia pizza w piekarniku, natomiast dekorator sprawdza, czy piekarnik ma odpowiednią temperaturę, a jeśli nie, zamiast tego umieszczany jest firewood.

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))

Przejdź w stronę oznaczonej jasną krzyżykiem X i użyj funkcji read() stojąc naprzeciw piekarnika, aby sprawdzić temperaturę piekarnika. Następnie, wywołaj udekorowaną funkcję bake_pizza() i podaj odczytaną temperaturę jako argument, na przykład: bake_pizza(450).

Podczas gdy będziesz umieszczać pizze i drewno w piekarniku, zatrzymaj się przy złotym znaku X i skieruj się w stronę szafki, gdzie możesz zebrać składniki do przygotowania sałatek. Aktualnie składniki sałatki są przechowywane w zagnieżdżonej liście, która została przedstawiona w edytorze kodu, jednak ta lista jest nieuporządkowana i korzystniej będzie mieć składniki umieszczone w odpowiedniej liście, aby można było ich użyć do sałatek.

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

Stwórz listę o nazwie ingredients i użyj List Comprehension, aby "spłaszczyć" zagnieżdżoną listę. Jest to proces usuwania podlist ze zagnieżdżonej listy, tak aby wszystkie elementy znalazły się razem w jednej liście, a nie w wielu mniejszych listach. Po spłaszczeniu listy, użyj funkcji speak() z tą listą, aby zweryfikować składniki, których będziesz używać.

Gdy wszystkie niezbędne elementy zostaną umieszczone w piekarnikach, a lista ingredients zostanie uzupełniona, przejdź do ciemnych znaków X, aby stworzyć sałatki. W edytorze znajduje się funkcja oraz dekorator, które tym razem nie są połączone i muszą zostać zadeklarowane ręcznie, na przykład: salad = add_toppings(toss_salad("ranch","carrot")). Zestaw tych funkcji przyjmuje dwa (2) argumenty: dressing oraz 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))

Każdy ciemny znak X znajduje się na kolorowym dywanie; każdy z nich wymaga przygotowania innej sałatki przy użyciu składników, które zebrałeś ze szafki. Na żółtym dywanie przygotuj sałatkę używając: cesar oraz cheese; na zielonym dywanie przygotuj sałatkę używając: oil oraz tomato; na niebieskim dywanie przygotuj sałatkę używając: ranch oraz carrot.

Gdy wszystkie trzy (3) sałatki zostaną przygotowane przy użyciu udekorowanej funkcji toss_salad(dressing, vegetable) w podanym formacie, poziom zostanie ukończony.

Księga Kodów