المسارات
/
Python
Python
/
التمارين
/
هجوم الملكة
هجوم الملكة

هجوم الملكة

سهل

التعليمات

بالنظر إلى موقع ملكتين على رقعة شطرنج، بيّن ما إذا كانتا في وضع يسمح لهما بمهاجمة إحداهما الأخرى أم لا.

في لعبة الشطرنج، تستطيع الملكة مهاجمة القطع التي تقع في الصف نفسه أو العمود نفسه أو القطر نفسه.

يمكن تمثيل رقعة الشطرنج بمصفوفة بحجم 8 في 8.

فإذا قيل لك إن الملكة البيضاء في c5 (بترقيم يبدأ من الصفر، أي العمود 2 والصف 3) والملكة السوداء في f2 (بترقيم يبدأ من الصفر، أي العمود 5 والصف 6)، فأنت تعرف أن الترتيب كالتالي:

رقعة شطرنج عليها ملكتان. الأسهم المنطلقة من الملكة في c5 تشير إلى الاتجاهات الممكنة للأسر على طول العمود والصف والقطر.

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

شكر وتقدير

أنشأ صورة رقعة الشطرنج habere-et-dispertire باستخدام LaTeX وحزمة chessboard من إعداد Ulrike Fischer.

رسائل الاستثناءات

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

يتطلب هذا التمرين تحديدًا أن تستخدم عبارة raise لـ«رمي» ValueErrors إذا مُرِّر إلى الباني Queen أعداد سالبة، أو أعداد لا تمثّل صفًّا أو عمودًا صالحًا. لن تنجح الاختبارات إلا إذا نفّذت raise للاستثناء وأرفقت معه رسالة. كما ينبغي أن تنفّذ raise لقيمة ValueError إذا كانت الملكتان الممرَّرتان إلى الطريقة can_attack() في الموقع نفسه.

لرفع ValueError مع رسالة، اكتب الرسالة كوسيط لنوع exception:

# if the row parameter is negative
raise ValueError("row not positive")

# if the row parameter is not on the defined board
raise ValueError("row not on board")

# if the column parameter is negative
raise ValueError("column not positive")

# if the column parameter is not on the defined board
raise ValueError("column not on board")

# if both the queens are on the same location
raise ValueError("Invalid queen position: both queens in the same square")
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء هجوم الملكة؟

سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.