उन्नत पायथन विकास पाठ्यक्रम
अध्याय
>
स्तर
डेकोरेटर्स
अधिक जटिल डेकोरेटर्स
उद्देश्य
तर्कों के साथ डेकोरेटर्स का उपयोग करके पिज़्ज़ा को सही तापमान पर ओवन में रखें और सलाद तैयार करें।
अब जबकि पिज़्ज़ा पहले से ही तैयार हैं, इन्हें ओवन में पकाने का समय आ गया है, और एक बार पक जाने पर हमें पिज़्ज़ा के साथ सलाद भी तैयार करने होंगे। आप इन कार्यों को तर्कों के साथ डेकोरेटर्स का उपयोग करके पूरा कर सकते हैं, जैसे कि कस्टम फ़ंक्शन्स में आप डेकोरेटर्स के माध्यम से तर्क पास कर सकते हैं।
पिज़्ज़ा को ओवन में रखना है लेकिन पहले आपको नक्शे के निचले बाएं कोने पर अधिक "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" करने के लिए List Comprehension का उपयोग करें। यह वह प्रक्रिया है जिसके द्वारा नेस्टेड सूची की उप-सूचियों को हटा दिया जाता है ताकि सभी वस्तुएँ अब एक ही सूची में हों बजाय कई छोटी सूचियों के। एक बार सूची को फ्लैट कर लेने के बाद, उन सामग्रियों की पुष्टि करने के लिए speak() फ़ंक्शन का उपयोग करें जिन्हें आप उपयोग करने जा रहे हैं।
सभी आवश्यक वस्तुओं को ओवन में रखने और ingredients सूची को तैयार करने के बाद, गहरे X चिन्हों तक जाएँ ताकि सलाद तैयार किया जा सके। एडिटर में एक फ़ंक्शन और डेकोरेटर सेटअप किए गए हैं, इस बार वे जुड़े हुए नहीं हैं और उन्हें मैन्युअल रूप से घोषित करना होगा, उदाहरण के लिए: salad = add_toppings(toss_salad("ranch","carrot")) । इस फ़ंक्शन सेट को दो (2) तर्कों की आवश्यकता होती है: 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" हों।
एक बार जब सभी तीन (3) सलाद सज्जित फ़ंक्शन toss_salad(dressing, vegetable) का उपयोग करके इस प्रारूप में तैयार हो जाते हैं, तो स्तर पूरा हो जाएगा।