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.