دورة تطوير بايثون المتقدمة
الفصل
>
المستوى
المُزخِّفات
المزيد من الزخارف المعقدة
الهدف
ضع البيتزا في الفرن في درجات الحرارة الصحيحة وحضّر السلطات باستخدام الديكوريتر مع المعاملات.
الآن وبعد أن أصبحت البيتزا جاهزة، حان الوقت لطهيها في الأفران، وبمجرد الانتهاء من ذلك يجب أن نعد السلطات لتقديمها مع البيتزا بعد نضجها. يمكنك إنجاز هذه المهام باستخدام الديكوريتر مع المعاملات، حيث يمكنك أيضًا تمرير المعاملات عبر الديكوريتر مثلما تفعل مع الدوال المخصصة.
تحتاج إلى وضع البيتزا في الفرن لكن أولاً عليك جمع المزيد من "firewood" في أسفل يسار الخريطة. بمجرد جمعها، قم بالتقاط السلة الموجودة على المنضدة بجانب الفرن الأيسر، وهذه السلة تحتوي على "pizza" لتُخبز في الأفران.
هناك دالة وديكوريترها معدان في محرر الشيفرة، حيث تُستخدم الدالة لوضع وخبز "pizza" في الفرن، ويتحقق الديكوريتر مما إذا كان الفرن في درجة الحرارة المناسبة، وإذا لم تكن كذلك يتم وضع "firewood" بدلاً منها.
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))
اتجه إلى العلامات الخفيفة على شكل X واستخدم دالة read() أثناء مواجهة الفرن، لتحديد درجة حرارة الفرن. ثم قم بكتابة الدالة المزينة bake_pizza() وأضف درجة الحرارة التي قرأتها كمعامل، على سبيل المثال: bake_pizza(450).
أثناء انتقالك لوضع البيتزا وقطع firewood في الأفران، توقف عند العلامة الذهبية على شكل X وواجه الخزانة؛ هنا يمكنك جمع المكونات اللازمة لإعداد السلطات. حالياً، يتم تخزين مكونات السلطة في قائمة متداخلة موضحة في محرر الشيفرة، ولكن هذه القائمة فوضوية ومن الأفضل أن تكون العناصر مخزنة في قائمة منظمة لاستخدامها في السلطات.
cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]
قم بإنشاء قائمة باسم ingredients واستخدم تعبيرات القوائم لتفريغ القائمة المتداخلة (flatten)؛ أي إزالة القوائم الفرعية من القائمة المتداخلة بحيث تُجمع جميع العناصر في قائمة واحدة بدلاً من عدة قوائم أصغر. بعد تفريغ القائمة، استخدم دالة speak() مع القائمة للتحقق من المكونات التي ستستخدمها.
بعد أن يتم وضع جميع العناصر الضرورية في الأفران ومعالجة قائمة ingredients، اتجه إلى العلامات الداكنة على شكل X لإعداد السلطات. في المحرر، تم إعداد دالة وديكوريتر؛ هذه المرة لم يتم ربطهما ويجب إعلانهما يدوياً، على سبيل المثال: salad = add_toppings(toss_salad("ranch","carrot")). تأخذ هذه المجموعة من الدوال معاملين: dressing و 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))
تقع كل علامة X داكنة على سجادة ملونة؛ كل سجادة تتطلب إعداد سلطة مختلفة باستخدام المكونات التي جمعتها من الخزانة. على السجادة الصفراء، حضّر سلطة باستخدام: "cesar" و "cheese"، وعلى السجادة الخضراء حضّر سلطة باستخدام: "oil" و "tomato"، وعلى السجادة الزرقاء حضّر سلطة باستخدام: "ranch" و "carrot".
بمجرد تحضير الثلاث سلطات باستخدام الدالة المزينة toss_salad(dressing, vegetable) بهذه الطريقة، سيتم إكمال المستوى.