Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Dekorátorok
Összetettebb dekorátorok
Célkitűzés
Helyezd a pizzákat a sütőbe a megfelelő hőmérsékleten, és készíts salátákat dekorátorokkal, amelyek argumentumokat is fogadnak.
Mivel a pizzák már elő vannak készítve, ideje őket a sütőkben megsütni, és miután ez megtörtént, salátákat kell készítenünk a pizzák mellé. Ezeket a feladatokat dekorátorokkal végezheted el, amelyek argumentumokat is fogadnak; hasonlóan az egyedi függvényekhez, argumentumokat is átadhatsz a dekorátoroknak.
A pizzákat a sütőbe kell helyezni, de először gyűjts össze több firewood-t a térkép bal alsó részén. Miután összegyűjtötted, vedd fel a kosarat a bal oldali sütő közelében található pultról; ez a kosár pizza-t tartalmaz, amit a sütőkben kell megsütni.
A kódszerkesztőben beállították a függvényt és annak dekorátorát; a függvény a pizza sütőbe helyezésére és megsütésére szolgál, a dekorátor pedig ellenőrzi, hogy a sütő megfelelő hőmérsékleten van-e, és ha nem, akkor helyette firewood-t helyez el.
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))
Sétálj a világos X jelölésekhez, és a sütő felé fordulva használd a read() függvényt a sütő hőmérsékletének megállapításához. Ezt kövesd azzal, hogy megírod a dekorált bake_pizza() függvényt, és hozzáadod a leolvasott hőmérsékletet argumentumként, például: bake_pizza(450).
Miközben a pizzákat és a tűzifát a sütőkbe helyezed, állj meg az arany X jelölésnél, és fordulj a szekrény felé; itt gyűjtheted össze azokat az alapanyagokat, amelyekkel salátákat készíthetsz. Jelenleg a saláta alapanyagok egy beágyazott listában vannak tárolva, ahogy azt a kódszerkesztő is mutatja, azonban ez a lista rendezetlen, és a legjobb, ha az elemeket egy megfelelő listában tárolod, hogy felhasználhasd őket a salátákhoz.
cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]
Hozz létre egy ingredients nevű listát, és használd a List Comprehension-t a beágyazott lista „kiegyenesítéséhez”. Ez a folyamat azt jelenti, hogy a beágyazott listák elemeit egyetlen listába rendezed, ahelyett, hogy több kisebb lista lenne. Miután a lista kiegyenesedett, használd a speak() függvényt a lista segítségével, hogy ellenőrizd azokat az alapanyagokat, amelyeket felhasználni fogsz.
Miután az összes szükséges elemet a sütőkbe helyezted, és a ingredients listával is foglalkoztál, sétálj a sötét X jelölésekhez, hogy elkészítsd a salátákat. A szerkesztőben beállítottak egy függvényt és dekorátort, ezúttal ezek nincsenek összekapcsolva, és manuálisan kell őket deklarálnod, például: salad = add_toppings(toss_salad("ranch","carrot")).
Ez a függvénykészlet két (2) argumentumot vesz: dressing és 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))
Minden sötét X jelölés egy színes szőnyegen található, mindegyiken egy különböző salátát kell elkészíteni az általad a szekrényből összegyűjtött alapanyagok felhasználásával. A sárga szőnyegen készíts egy salátát a következőkkel: cesar és cheese, a zöld szőnyegen készíts egy salátát a következőkkel: oil és tomato, a kék szőnyegen készíts egy salátát a következőkkel: ranch és carrot.
Miután mind a három (3) saláta összeállt a dekorált függvény toss_salad(dressing, vegetable) segítségével ebben a formátumban, a pálya befejeződik.