Coding for KidsCoding for Kids
Kreatív SzintekKihívásokTanári Útmutató
Szavazzon a funkciókra
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.

Kódkönyv