دورة تطوير بايثون المتقدمة
الفصل
>
المستوى
مولدات
التقدم يدويًا في Generator
الهدف
استخدام المولد في تسلسل يدوي لتجميع وإنتاج المواد اللازمة لصنع الخبز.
أمامك مرفق يمكنك من خلاله تجميع عجينة الخبز باستخدام المكابس. عادةً ما تستخدم وظيفة combine() لتجميع المواد ولكن ليس هذا هو الحال هنا، حيث يجب تحسين المواد أولاً قبل أن يمكن تجميعها.
لهذا المهمة يمكننا استخدام المولدات حيث يمكن تخصيصها لإخراج أنواع مختلفة من الملفات وكذلك يمكن استدعاء تسلسلها عند الطلب بدلاً من الإخراج التلقائي كما تفعل الوظائف والحلقات. إليك مثال:
def bread():
yield 5
yield "grain"
الكود أعلاه يحتوي على مولد مع تعبيرين yield، أحدهما ينتج رقماً حقيقياً والآخر سلسلة نصية. يمكننا إنتاج قيم المولد حسب الرغبة باستخدام وظيفة next(). مثل هذا:
recipe = bread() # تهيئة المولد player.place(next(recipe)) # يتم استدعاء القيمة الأولى player.collect(next(recipe)) # يتم استدعاء القيمة الثانية
في المثال أعلاه، يتم تهيئة المولد ويتم استخدام وظيفة next() مع المولد لاستدعاء القيمة الأولى لاستخدامها في دالة place(). يتم تكرار هذا مع القيمة الثانية ولكن بدلاً من ذلك يتم استخدامها في دالة collect(). وهذا يسهل استدعاء القيم من أنواع مختلفة في تسلسل دون الحاجة لاستخدام قوائم أو متغيرات متعددة.
سيتم تعريف مولد باسم bread() في محرر الشفرات ولكنه يتطلب أرقام الكميات لكل مكون من أجل تحسين عجينة الخبز. تُكتب هذه الأرقام على اللافتة المجاورة للمرفق. قم بتهيئة المولد لاستخدامه عن طريق الرجوع إليه، مثل هذا: recipe = bread()
أولاً امشي إلى العلامة X المضيئة بجانب خزان الحليب وcollect() آخر كمية من الحليب في الخزان باستخدام وظيفة المولد next()، مثل هذا: player.collect(next(recipe)). ثم امشي إلى العلامة X الذهبية بجانب اللافتة واستخدم وظيفة speak() للحصول على أرقام الكميات اللازمة للمولد لإنتاج الخبز وتدوينها في المولد. تخزن البيانات في ثابت باسم "sign" وسيتم استدعاؤها مثل هذا: player.speak(sign).
بمجرد إدخال جميع القيم في المولد، ادخل المرفق واستخدم player.place(next(recipe)) على العلامات X الداكنة وplayer.collect(next(recipe)) على العلامات X المضيئة لإكمال المستوى.