Avanceret Python Udviklingskursus
Kapitel
>
Niveau
Dekoratorer
Mere komplekse dekoratører
Mål
Sæt pizzaerne i ovnen ved de korrekte temperaturer og forbered salater ved at bruge dekoratører med argumenter.
Nu hvor pizzaerne allerede er forberedt, er det tid til at bage dem i ovnene. Når det er gjort, skal vi forberede salater, som skal serveres sammen med pizzaerne, når de er færdige. Du kan udføre disse opgaver ved at bruge dekoratører med argumenter; ligesom med brugerdefinerede funktioner kan du også videregive argumenter gennem dine dekoratører.
Pizzaerne skal placeres i ovnen, men først skal du samle mere firewood nederst til venstre på kortet. Når det er samlet, skal du hente kurven ved skranken ved den venstre ovn; i denne kurv er der pizza, der skal bages i ovnene.
Der er en funktion og dens dekoratør opsat i kodeeditoren. Funktionen bruges til at placere og bage pizza i ovnen, og dekoratøren tjekker, om ovnen har den rigtige temperatur. Hvis temperaturen ikke er korrekt, placeres firewood i stedet.
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))
Gå til de lyse X-mærker og brug read()-funktionen, mens du står overfor ovnen, for at identificere ovnens temperatur. Fortsæt med at skrive den dekorerede funktion bake_pizza() og tilføj den temperatur, du aflæste, som et argument, for eksempel: bake_pizza(450) .
Mens du placerer pizzaerne og firewood i ovnene, skal du stoppe ved det gyldne X-mærke og vende dig mod skabet; her kan du samle ingredienserne til at lave salater. I øjeblikket er salatingredienserne gemt i en indlejret liste, der er vist i kodeeditoren, men denne liste er rodet, og det vil være i din interesse at have elementerne gemt i en rigtig liste, så de kan bruges til dine salater.
cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]
Opret en liste kaldet ingredients og brug List Comprehension til at “flade” den indlejrede liste ud. Dette er processen med at fjerne de underordnede lister fra den indlejrede liste, så alle elementer nu er sammen i én liste i stedet for flere mindre lister. Når listen er blevet fladt ud, skal du bruge speak()-funktionen med listen for at bekræfte de ingredienser, du vil bruge.
Når alle nødvendige elementer er blevet placeret i ovnene, og ingredients-listen er behandlet, skal du gå til de mørke X-mærker for at lave salaterne. I editoren er en funktion og en dekoratør opsat, denne gang er de ikke forbundet og skal erklæres manuelt, for eksempel: salad = add_toppings(toss_salad("ranch","carrot")) . Denne sætt af funktioner tager to (2) argumenter: dressing og 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))
Hvert mørkt X-mærke er placeret på et farvet tæppe; hvert tæppe har en forskellig salat, der skal laves med de ingredienser, du hentede fra skabet. På det gule tæppe skal du lave en salat med: cesar og cheese, på det grønne tæppe skal du lave en salat med: oil og tomato, og på det blå tæppe skal du lave en salat med: ranch og carrot .
Når alle tre (3) salater er sammensat ved hjælp af den dekorerede funktion toss_salad(dressing, vegetable) i dette format, vil niveauet være fuldført.