HaladĂł Python FejlesztĆi Tanfolyam
Fejezet 6
>
Szint 2
Cél
GyƱjtsd össze az alapanyagokat Ă©s kĂ©szĂts kĂŒlönfĂ©le pizzĂĄkat dekorĂĄtorok segĂtsĂ©gĂ©vel.
MiutĂĄn a sĂŒtĆk kĂ©szen ĂĄllnak, itt az ideje, hogy pizzĂĄkat kĂ©szĂtsĂŒnk, amelyeket kĂ©sĆbb megsĂŒthetĂŒnk. Most, hogy mĂĄr tudjuk, hogyan kell hasznĂĄlni a dekorĂĄtorokat, egy kicsit optimalizĂĄlhatjuk Ćket. Ha a kĂłdban az @ szimbĂłlumot hasznĂĄljuk a dekorĂĄtor neve utĂĄn, Ă©s ezt a kĂłdot a dekorĂĄlt fĂŒggvĂ©ny fölĂ© helyezzĂŒk, automatikusan csatolhatjuk a dekorĂĄtort anĂ©lkĂŒl, hogy vĂĄltozĂłt hasznĂĄlnĂĄnk. PĂ©ldĂĄul:
# Decorator
def create_pizza(func):
def set():
pizza = ["dough","red sauce","cheese"]
player.combine(pizza)
func()
return set
# Function being decorated with @
@create_pizza
def peperoni_pizza():
player.place("Peperoni")
player.speak("Peperoni Pizza has been prepped")
# Using pre-decorated function
peperoni_pizza()
Ărdemes megjegyezni, hogy ez a technika leegyszerƱsĂti a folyamatot azĂĄltal, hogy egy fĂŒggvĂ©ny elĆre dekorĂĄlt, azonban nĂ©ha mĂ©gis cĂ©lszerƱ lehet a dekorĂĄtort egy vĂĄltozĂłhoz hozzĂĄrendelni a nagyobb rugalmassĂĄg Ă©rdekĂ©ben.
KezdĂ©snek sĂ©tĂĄlj a sĂĄrga X jelzĂ©shez, Ă©s vedd fel a pizza elkĂ©szĂtĂ©sĂ©hez szĂŒksĂ©ges alapanyagokat. A pizza elkĂ©szĂtĂ©sĂ©hez szĂŒksĂ©ges alapanyagok: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" Ă©s "pineapple". Ezeknek az alapanyagoknak a többsĂ©ge egy, a kamra polcait reprezentĂĄlĂł mĂĄtrixban talĂĄlhatĂł. HasznĂĄlj list comprehension-t, hogy az összes, felvenni kĂvĂĄnt elemet elmentsd egy listĂĄba.
shelves = [ ["cheese", "dough", "jar"], ["jar", "red sauce", "jar"], ["peperoni", "jar" , "ham"], ["olive", "pepper", "onions"] ] ingredients = [ item for row in shelves for item in row if not "jar" in item]
A fenti kĂłdban az ingredients lista vĂ©gigiterĂĄl a shelves nevƱ mĂĄtrix sorain, Ă©s kiszƱri az összes olyan elemet, amely a "jar"-t tartalmazza. Ez a list comprehension idĆt takarĂt meg, mivel nem kell mindent kĂ©zzel hozzĂĄadni. HasznĂĄld a speak() fĂŒggvĂ©nyt az alapanyagok listĂĄjĂĄval, hogy ellenĆrizd a felhasznĂĄlni kĂvĂĄnt elemeket.
MiutĂĄn az összes alapanyagot összegyƱjtötted, kivĂ©ve az "pineapple"-t, a pizzakĂ©szĂtĆ fĂŒggvĂ©nyekhez a place() fĂŒggvĂ©nyeket kell hozzĂĄadni a funkciĂłik teljesĂtĂ©sĂ©hez. Ezek a fĂŒggvĂ©nyek a kĂłdszerkesztĆben vannak elĆkĂ©szĂtve, Ă©s a következĆ nevƱek: peperoni_pizza() amelyhez szĂŒksĂ©g van a "peperoni"-ra, vegetable_pizza() amelyhez szĂŒksĂ©g van az "olive", "pepper", "onion" elemekre, valamint a pineapple_pizza() amelyhez a "ham" Ă©s a "pineapple" szĂŒksĂ©ges.
SĂ©tĂĄlj a sötĂ©t X jelzĂ©sƱ helyekre, Ă©s hasznĂĄld a dekorĂĄlt fĂŒggvĂ©nyeket a pizzĂĄk elkĂ©szĂtĂ©sĂ©hez. A piros szĆnyegekkel jelölt X pontokon kĂ©szĂtsd el a peperoni_pizza()-t, a zöld szĆnyegeken a vegetable_pizza()-t, Ă©s a sĂĄrga szĆnyegeken a pineapple_pizza()-t. Ătközben a sĂĄrga szĆnyeg felĂ© haladva ĂĄllj meg a vilĂĄgos X jelzĂ©snĂ©l, nĂ©zz szembe a szekrĂ©nnyel, Ă©s hasznĂĄld a collect() fĂŒggvĂ©nyt, hogy felvedd az "pineapple"-t. KĂ©szĂtsd elĆ az összes pizzĂĄt, hogy sikeresen teljesĂtsd a szintet.