Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Dekoratører
Mer komplekse dekoratører
Mål
Sett pizzaene i ovnen på riktig temperatur og gjør klar salater ved å bruke dekoratører med argumenter.
Nå som pizzaene allerede er forberedt, er det på tide å steke dem i ovnene. Når det er gjort, skal vi gjøre klar salater som skal serveres med pizzaene. Du kan utføre disse oppgavene ved å bruke dekoratører med argumenter, på samme måte som med egendefinerte funksjoner der du også kan sende argumenter gjennom dekoratørene dine.
Pizzaene må plasseres i ovnen, men først må du samle inn mer firewood nederst til venstre på kartet. Når dette er samlet, hent kurven ved disken ved den venstre ovnen; denne kurven inneholder pizza som skal stekes i ovnene.
Det er en funksjon og dens dekoratør som er satt opp i kodeeditoren. Funksjonen brukes til å plassere og steke pizza i ovnen, dekoratøren sjekker om ovnen har riktig temperatur, og hvis temperaturen er feil, blir firewood plassert 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-markeringene og bruk read() funksjonen mens du står vendt mot ovnen, for å identifisere ovnstemperaturen. Fortsett med å kalle den dekorerte funksjonen bake_pizza() og legg til temperaturen du leste som et argument, for eksempel: bake_pizza(450) .
Mens du plasserer pizzaene og veden i ovnene, stopp ved den gylne X-markeringen og vend deg mot skapet; her kan du samle ingrediensene for å lage salater. For øyeblikket er salatingrediensene lagret i en innleiret liste som er skissert i kodeeditoren, men denne listen er rotete, og det vil være i din beste interesse å ha elementene lagret i en ordentlig liste for å kunne bruke dem i salatene dine.
cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]
Lag en liste kalt ingredients og bruk listeforståelse for å “flate ut” den innleirede listen. Dette er prosessen med å fjerne de underliggende listene fra den innleirede listen slik at alle elementene nå er samlet i én liste i stedet for flere mindre lister. Når listen er flatet ut, bruk funksjonen speak() med listen for å bekrefte ingrediensene du skal bruke.
Etter at alle nødvendige elementer er plassert i ovnene, og ingredients-listen er behandlet, gå til de mørke X-markeringene for å lage salatene. I editoren er en funksjon og en dekoratør oppsatt, denne gangen er de ikke koblet sammen og må deklareres manuelt, for eksempel: salad = add_toppings(toss_salad("ranch","carrot")) . Dette settet med funksjoner tar 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))
Hver mørk X-markering er plassert på et farget teppe; hver av dem har en annen salat som må lages ved hjelp av ingrediensene du hentet fra skapet. På det gule teppet, lag en salat med: cesar og cheese, på det grønne teppet lag en salat med: oil og tomato, og på det blå teppet lag en salat med: ranch og carrot.
Når alle de tre (3) salatene er satt sammen ved å bruke den dekorerte funksjonen toss_salad(dressing, vegetable) i dette formatet, vil nivået være fullført.