في هذا التمرين، ستكتب برنامجًا يحدّد حالة لعبة إكس-أو. (قد تعرف اللعبة أيضًا باسم "noughts and crosses" أو "Xs and Os".)
تُلعب اللعبة على شبكة 3×3.
يتناوب اللاعبون على وضع علامات X وO على الشبكة.
تنتهي اللعبة عندما يفوز أحد اللاعبين بوضع ثلاث علامات في صف أو عمود أو على أحد أقطار الشبكة، أو عندما تُملأ الشبكة بالكامل.
في هذا التمرين، سنفترض أن X هو من يبدأ.
مهمتك هي تحديد الحالة التي وصلت إليها لعبة معطاة.
هناك 3 حالات محتملة للعبة:
إذا كانت اللوحة المعطاة غير صالحة، فارمِ خطأً مناسبًا.
تكون اللوحة غير صالحة إذا استوفت الشروط التالية:
X هو من يبدأ). | |
X | |
___|___|___
| |
| X | O
___|___|___
| |
O | X |
| |
| |
X | O | X
___|___|___
| |
X | X | O
___|___|___
| |
O | X | O
| |
| |
X | X | X
___|___|___
| |
| O | O
___|___|___
| |
| |
| |
| |
O | O | X
___|___|___
| |
| |
___|___|___
| |
| |
| |
| |
X | X | X
___|___|___
| |
O | O | O
___|___|___
| |
| |
| |
أحيانًا يلزمك أن ترفع استثناءً. وعندما تفعل ذلك، ينبغي أن تُضمّن دائمًا رسالة خطأ ذات معنى تشير إلى مصدر الخطأ. فهذا يجعل الكود أكثر قابلية للقراءة ويساعد كثيرًا في تصحيح الأخطاء. وفي الحالات التي تعرف فيها أن مصدر الخطأ سيكون من نوع معيّن، يمكنك أن تختار رفع أحد أنواع الأخطاء المضمّنة، لكن يجب أن تُضمّن مع ذلك رسالة ذات معنى.
تنتهي لعبة Tic Tac Toe الصحيحة عندما يفوز أحد اللاعبين.
وإذا كان كلا اللاعبين في حالة فوز، فإن هذا التمرين يتوقع منك أن تستخدم عبارة الرفع وأن «تُطلق» ValueError في حلك.
ويُتوقع أيضًا من الكود أن يُطلق ValueError إذا تبيّن أن أحد اللاعبين لعب دورين متتاليين، أو لعب النقلة الأولى بينما كان مُكلَّفًا بلعب النقلة الثانية.
لرفع ValueError مع رسالة، اكتب الرسالة كوسيط إلى نوع exception:
# Example when player O goes before player X.
raise ValueError("Wrong turn order: O started")
# Example when player X goes twice.
raise ValueError("Wrong turn order: X went twice")
# Example when player X wins AND player O wins.
raise ValueError("Impossible board: game should have ended after the game was won")
ستتحقق الاختبارات من مطابقة رسالة الخطأ مطابقة تامة، لذا اقرأ النتائج المتوقعة بعناية.
سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.