Coding for KidsCoding for Kids
المستويات الإبداعيةالتحدياتدليل المعلم
صوت للميزات
دورة تطوير بايثون المتقدمة
الفصل
>
المستوى

القوائم المتقدمة
خرائط، تصفية، وتقليل

الهدف

أنهِ خلط وإنتاج الآيس كريم باستخدام دوال Map و Filter و Reduce.

بعض نكهات الآيس كريم منخفضة أو فارغة، ولكن لدينا ما يكفي من المواد لتعويض ذلك وتجميع المزيد من الآيس كريم. للقيام بذلك، يجب عليك استخدام Map، وهي أداة قوية تتيح لك تقليل كمية الشيفرة التي تحتاج إلى كتابتها عن طريق تكثيف الحلقات والتفرع البرمجي. الدالتان Filter و Reduce تكملان دالة Map وتوفران مرونة مطلوبة في برمجتك.

لبداية، تحتاج إلى استيراد دالة Reduce من مكتبة functools لاستخدامها، وذلك بإضافة الكود التالي في بداية برنامجك: from functools import reduce. دالتا Map و Filter مدمجتان في Python ولا تحتاجان إلى استيراد.

أولاً، تحتاج إلى التقاط بعض المكونات من الفريزر التجريبي، والسير إلى علامة X الذهبية، ومواجهة الباب وفتحه باستخدام دالة open(). اجمع كل برطمانات الـ"cream" الموجودة في الفريزر ثم توجه إلى علامة X المضاءة فوق السجادة الخضراء.

هناك ثلاث ثوابت لقوائم (list constants) في الحقل تُدعى: vanilla، وstrawberry، وchocolate. كل ثابت يحتوي على مجموعة من المكونات التي تشكل نكهة الآيس كريم. عند علامة X الخضراء، تحقق من محتويات ثابت القائمة strawberry. أولاً، استخدم دالة place() لإيداع الـ"cream" التي جمعتها سابقاً، واستخدم دالة speak() للتحقق من محتويات ثابت القائمة strawberry.

بمجرد التحقق، حان الوقت لاستخدام دالة Map مع ثابت القائمة strawberry، حيث أن محتويات القائمة كلها أرقام عشرية. باستخدام دالة map()، يمكنك تقريب جميع العناصر في القائمة، مما يلغي الحاجة للتكرار على كل عنصر في حلقة لتقريبه فردياً. للقيام بذلك، أنشئ قائمة باسم map1 واستخدم دالة map() بالتزامن مع ثابت القائمة strawberry ودالة round()، على النحو التالي: map1 = list(map(round, strawberry)). وبمجرد الانتهاء، استخدم دالة speak() مع map1 للتحقق من النتيجة.

بعد ذلك ننتقل إلى دالة Filter، التي تعمل على نفس مبدأ دالة Map ولكنها تتطلب دالة مساعدة لاستخدامها معاً. في أعلى المحرر ستجد دالة معدة مسبقاً تُدعى main_ingredients، والتي تُستخدم لتحديد ما إذا كان الرقم أكبر من الرقم 25.

def main_ingredients(value): return value > 25

بدلاً من المرور عبر حلقة، يمكنك استخدام هذه الدالة بالتزامن مع دالة filter() لتجميع قائمة جديدة تحتوي على العناصر التي تتجاوز قيمة 25، وهي المكونات الرئيسية. أنشئ قائمة جديدة باسم filter1 وطبق دالة filter() مع main_ingredients وmap1 لتحديد جميع المكونات الرئيسية الموجودة في قائمة Map التي أنشأتها، على النحو التالي: filter1 = list(filter(main_ingredients, value)). وبمجرد الانتهاء، استخدم دالة speak() مع filter1 للتحقق من النتيجة.

الآن ننتقل إلى دالة Reduce، التي تُستخدم بنفس طريقة عمل دالة Filter، ولكنها تُستخدم هذه المرة لتجميع أو تقليل قائمة إلى وحدة واحدة. مثل دالة Filter، تستخدم دالة مخصصة، وهذه المرة تُدعى custom_sum، والتي تجمع رقمين ديناميكياً معاً.

def custom_sum(first, second): return first + second

أنشئ متغيراً باسم reduce1 واستخدم دالة reduce() بالتزامن مع دالة custom_sum و filter1 لتجميع جميع العناصر في وحدة واحدة، على النحو التالي: reduce1 = reduce(custom_sum, filter1). وبمجرد الانتهاء، استخدم دالة speak() مع reduce1 للتحقق من النتيجة.

الآن بعد أن أكملت دورة Map وFilter وReduce، كرر نفس الدورة عند علامات X المضاءة على السجاد الأحمر والأزرق. على السجادة الحمراء، استخدم ثابت القائمة vanilla، وأنشئ map2 وfilter2 وreduce2. وعلى السجادة الزرقاء، استخدم ثابت القائمة chocolate، وأنشئ map3 وfilter3 وreduce3.

توجه إلى علامة X النهائية المضاءة الموجودة فوق السجادة الأرجوانية، وأضف reduce1 وreduce2 وreduce3 لتجميع المكونات الرئيسية لكل من vanilla و strawberry و chocolate. أنشئ متغيراً باسم neapolitan وأضف جميع نتائج Reduce، على النحو التالي: neapolitan = reduce1+reduce2+reduce3. استخدم دالة speak() مع هذا التجميع للتحقق منه، واستخدم دالة place() معه لإنشاء آيس كريم نيابوليتان وإكمال المستوى.

كتاب الكود