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

معالجة الاستثناءات
استثناءات مخصصة

الهدف

استخدم الاستثناءات المخصصة لجمع الرسائل مع طلبات المنتجات وإرسالها عبر حمام الزاجل.

يتم توزيع بعض الرسائل عبر المزرعة ومحطات أخرى بواسطة حمام البريد، وسيكون من الجيد إرسال بعضها للبقاء في الصدارة. لقد كنا نلتقط الأخطاء باستخدام الاستثناءات العامة، ولكن في بعض الأحيان قد تستفيد من إنشاء استثناءات مخصصة لحالات معينة للغاية. سنقوم بتجميع الرسائل واختيار الحمام من خلال تحديد العناصر الصحيحة باستخدام استثناءاتنا المخصصة.

يتم إنشاء الاستثناءات المخصصة عن طريق إنشاء فئات؛ من خلال إضافة عبارة (Exception) يمكنك إعادة استخدام الفئة لتنفيذ الاستثناءات. لأغراضنا، سنقوم بإنشاء اثنين: InvalidLocation الذي يتم تفعيله عندما لا تمر سلسلة معينة من التحقق، و UnsuitableSelection الذي يُستخدم للتحقق مما إذا كان الرقم يتجاوز عتبة معينة.

class InvalidLocation(Exception): "Raised when location is invalid" pass class UnsuitableSelection(Exception): "Raised when pidgeon is 2 or younger" pass

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

هناك أربع ثوابت متغيرة مستخدمة في هذا الجزء: red_memo، blue_memo، green_memo و orange_memo. يتم جمع المذكرات التي تم تحديدها للتسليم في قطاع "west" فقط ليتم إرسالها. لتحديد ما إذا كنا سنأخذ المذكرة أم لا، سنستخدم كتل الشفرة try/except و else مع الاستثناء المخصص InvalidLocation. لاستخدام الاستثناء المخصص، اجعل جملة try تتحقق مما إذا كانت المذكرة موسومة بـ "west" وإذا لم تكن كذلك قم برفع الاستثناء. كتلة except تؤكد أن المذكرة غير صالحة بينما كتلة else تجمع المذكرة وتضيفها إلى قائمة prep، إذا تبين أنها موجهة إلى قطاع "west". على سبيل المثال:

try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)

توجه إلى كل علامة X الداكنة فوق السجاد الملون أمام الطاولات وقم بتشغيل سلسلة الاستثناءات باستخدام الثوابت المتغيرة المناسبة لكل لون.

بمجرد جمع المذكرات، توجه إلى علامة X الذهبية أمام الباب واستخدم الدالة open() للوصول إلى أقفاص الحمام. بمجرد الدخول، توجه إلى علامة X الفاتحة، واستدر، واستخدم الدالة close() لإغلاق الباب لضمان عدم هروب أي حمام.

توجه إلى علامة X الداكنة فوق السجادة البنفسجية؛ على الأقلام سنقوم بالتحقق مما إذا كان الحمام كبيرًا بما يكفي لحمل رسالة أو إذا كان فراخًا غير قادر على إجراء التسليم. هناك أربع ثوابت متغيرة أخرى مستخدمة في هذا الجزء: purple_pen، yellow_pen، white_pen و pink_pen، والتي تتوافق مع كل سجادة ملونة. سنستخدم نفس التقنية كما في المذكرات، باستخدام الفئة الثانية التي تم إعدادها.

استخدم كتل الشفرة try/except و else مع الاستثناء المخصص UnsuitableSelection لتحديد ما إذا كان الحمام كبيرًا بما يكفي لإجراء التسليم. تتحقق كتلة try مما إذا كان الثابت المتغير الذي يمثل القلم يحتوي على حمام مناسب عن طريق التحقق مما إذا كان الطائر أصغر من سنتين (2) سنة. إذا كان الحمام غير مناسب، يتم تفعيل كتلة except، وإلا يتم تفعيل كتلة else مما يُتيح لك إضافة الحمام إلى قائمة prep من أجل تسليم الرسالة.

try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")

توجه إلى كل علامة X الداكنة فوق السجاد الملون واستخدم هذه السلسلة مع الثابت المتغير المناسب الذي يتوافق مع السجادة الملونة الصحيحة. بمجرد جمع الحمام والرسائل، توجه إلى علامة X الذهبية في الأسفل تمامًا واستخدم الدالة place() مع قائمة prep التي قمت بإنشائها لإرسال الحمام لتسليم الرسائل وإكمال المستوى.

كتاب الكود