Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
Dekoratörler
Daha karmaşık Dekoratörler
Hedef
Dekoratörlere argümanlar vererek pizzaları fırında doğru sıcaklıkta pişirin ve salataları hazırlayın.
Pizzalar hazırlandıysa, onları fırınlarda pişirme zamanı geldi; bunun tamamlanmasının ardından pizzaların yanında servis etmek için salataları hazırlamalıyız. Bu görevleri, dekoratörlere argüman vererek gerçekleştirebilirsiniz; tıpkı özel fonksiyonlarda olduğu gibi, dekoratörlerinize de argüman geçirebilirsiniz.
Pizzaların fırına yerleştirilmesi gerekiyor, ancak önce haritanın sol alt köşesinde bulunan daha fazla "firewood" toplamanız lazım. Topladıktan sonra, sol fırının yanındaki tezgah üzerindeki sepeti alın; bu sepet, fırınlarda pişirilecek olan "pizza"yı içeriyor.
Kod editöründe bir fonksiyon ve dekoratörü ayarlandı, bu fonksiyon fırına "pizza" yerleştirmek ve pişirmek için kullanılıyor, dekoratör ise fırının doğru sıcaklıkta olup olmadığını kontrol ediyor ve eğer uygun sıcaklıkta değilse, yerine "firewood" yerleştiriliyor.
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))
Işıklı X işaretlerine doğru yürüyün ve fırına bakarak read() fonksiyonunu kullanın, böylece fırının sıcaklığını belirleyin. Ardından dekoratör uygulanmış bake_pizza() fonksiyonunu yazın ve okuduğunuz sıcaklığı argüman olarak ekleyin, örneğin: bake_pizza(450).
Pizzaları ve odunu fırınlara yerleştirirken, altın X işaretinde durun ve dolaba bakın; burada salata hazırlamak için malzemeleri toplayabilirsiniz. Şu anda salata malzemeleri, kod editöründe gösterilen iç içe liste içinde saklanıyor, ancak bu liste karışık durumda ve salatalarınızda kullanabilmeniz için öğelerin düzgün bir listede saklanması en iyisi olacaktır.
cabinet = ["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"] ingredients = [item for sublist in cabinet for item in sublist]
ingredients adında bir liste oluşturun ve iç içe listeyi "düzleştirmek" için Liste Anlaması (List Comprehension) kullanın. Bu işlem, iç içe listelerden alt listeleri kaldırarak tüm öğeleri tek bir listede toplamaktır. Liste düzleştirildikten sonra, kullanacağınız malzemeleri doğrulamak için speak() fonksiyonunu liste ile kullanın.
Gerekli tüm öğeler fırınlara yerleştirildikten ve ingredients listesi düzenlendikten sonra, salataları oluşturmak için koyu X işaretlerine doğru yürüyün. Editörde bir fonksiyon ve dekoratör ayarlandı; bu sefer birbirine bağlı değiller ve manuel olarak tanımlanmalıdır, örneğin: salad = add_toppings(toss_salad("ranch","carrot")). Bu fonksiyon seti iki (2) argüman alır: dressing ve 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))
Her koyu X işareti, farklı renkli bir halı üzerinde bulunuyor; her birinde, dolaptan aldığınız malzemeleri kullanarak hazırlanması gereken farklı bir salata var. Sarı halıda, "cesar" ve "cheese" kullanarak bir salata oluşturun; yeşil halıda "oil" ve "tomato" kullanın; mavi halıda ise "ranch" ve "carrot" kullanarak bir salata oluşturun.
Üç (3) salata, dekoratör uygulanmış toss_salad(dressing, vegetable) fonksiyonu bu formatta oluşturulduğunda, seviye tamamlanmış olacaktır.