Coding for KidsCoding for Kids
Kreativní ÚrovněVýzvyPrůvodce pro Učitele
Hlasovat pro funkce
Pokročilý kurz vývoje v Pythonu
Kapitola
>
Úroveň

Dekorátory
Složitější dekorátory

Cíl

Umístěte pizzy do trouby při správných teplotách a připravte saláty pomocí dekorátorů s argumenty.

Nyní, když jsou pizzy již připravené, je čas je upéct v troubách. Jakmile to bude hotovo, měli bychom připravit saláty, které se budou podávat k pizzám. Tyto úkoly můžete splnit pomocí dekorátorů s argumenty, podobně jako u vlastních funkcí, kdy můžete argumenty předávat i přes vaše dekorátory.

Pizzy je třeba umístit do trouby, ale nejprve musíte sebrat více firewood v levém dolním rohu mapy. Po jejich sebrání se vydejte ke koši na pultu vedle levé trouby, tento koš obsahuje pizza, které mají být upečeny v troubách.

Ve vývojovém prostředí je nastavena funkce a její dekorátor. Funkce slouží k umístění a upečení pizza v troubě, dekorátor kontroluje, zda má trouba správnou teplotu, a pokud ne, místo toho se umístí 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))

Jděte ke světle označeným X a použijte funkci read() při pohledu na troubu, abyste zjistili teplotu trouby. Poté napište dekorovanou funkci bake_pizza() a jako argument přidejte načtenou teplotu, například: bake_pizza(450).

Zatímco umisťujete pizzy a dřevo do trub, zastavte se u zlaté X značky a otočte se ke skříni, kde si můžete vyzvednout ingredience na přípravu salátů. V současné době jsou ingredience na salát uloženy ve vnořeném seznamu, který je vyznačen ve vývojovém prostředí, nicméně tento seznam je neuspořádaný a bylo by ve vašem nejlepším zájmu mít položky uloženy v řádném seznamu, aby je bylo možné použít pro vaše saláty.

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

Vytvořte seznam s názvem ingredients a použijte List Comprehension pro „zploštění“ vnořeného seznamu. Jedná se o proces odstranění podseznamů z vnořeného seznamu tak, aby všechny položky byly nyní společně v jednom seznamu namísto několika menších seznamů. Po zploštění seznamu použijte funkci speak() s tímto seznamem a ověřte ingredience, které budete používat.

Poté, co budou všechny potřebné položky umístěny do trub a seznam ingredients upraven, jděte k tmavým X značkám a vytvořte saláty. Ve vývojovém prostředí je nastavena funkce a dekorátor, tentokrát však nejsou propojeny a musí být deklarovány ručně, například: salad = add_toppings(toss_salad("ranch","carrot")). Tato sada funkcí přijímá dva (2) argumenty: dressing a 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ždá tmavá X značka se nachází na barevném koberci, každý z nich má jiný salát, který je třeba vytvořit s použitím ingrediencí, které jste vyzvedli ze skříně. Na žlutém koberci vytvořte salát s použitím: cesar a cheese, na zeleném koberci vytvořte salát s použitím: oil a tomato, na modrém koberci vytvořte salát s použitím: ranch a carrot.

Jakmile budou všechny tři (3) saláty sestaveny s použitím dekorované funkce toss_salad(dressing, vegetable) v tomto formátu, úroveň bude dokončena.

Kniha Kódu