এই অনুশীলনীতে আপনি এমন একটি প্রোগ্রাম বানাবেন, যা একটি টিক-ট্যাক-টো গেমের অবস্থা নির্ধারণ করে। (এই গেমটি আপনি "noughts and crosses" বা "Xs and Os" নামেও চিনতে পারেন।)
গেমটি একটি ৩×৩ গ্রিডে খেলা হয়।
খেলোয়াড়রা পালা করে গ্রিডে X ও O বসান।
একজন খেলোয়াড় সারি, কলাম বা কর্ণ বরাবর তিনটি চিহ্ন বসিয়ে জিতে গেলে, কিংবা পুরো গ্রিড ভরে গেলে গেমটি শেষ হয়।
এই অনুশীলনীতে আমরা ধরে নেব যে খেলা শুরু করে X।
একটি নির্দিষ্ট গেম কোন অবস্থায় আছে, সেটি নির্ধারণ করা আপনার কাজ।
গেমের সম্ভাব্য অবস্থা তিনটি:
প্রদত্ত বোর্ডটি অবৈধ হলে একটি উপযুক্ত এরর থ্রো করুন।
কোনো বোর্ড নিচের শর্তগুলো পূরণ করলে সেটি অবৈধ:
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 গেম শেষ হয় যখন একজন খেলোয়াড় জিতে যায়।
দুজন খেলোয়াড়ই যদি জয়ী অবস্থায় থাকে, তবে এই অনুশীলনীটি আশা করে যে আপনি raise স্টেটমেন্ট ব্যবহার করে আপনার সমাধানে একটি 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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।