مسیرها
/
Python
Python
/
تمرین‌ها
/
وضعیت بازی دوز
وضعیت بازی دوز

وضعیت بازی دوز

آسان

دستورالعمل‌ها

در این تمرین، برنامه‌ای را پیاده‌سازی می‌کنید که وضعیت یک بازی tic-tac-toe را مشخص می‌کند. (شاید این بازی را با نام‌های «noughts and crosses» یا «Xs and Os» هم بشناسید.)

این بازی روی یک شبکه‌ی ۳×۳ انجام می‌شود. بازیکنان به نوبت Xها و Oها را روی شبکه قرار می‌دهند. بازی زمانی تمام می‌شود که یکی از بازیکنان با قرار دادن سه علامت در یک ردیف، یک ستون یا روی یک قطر از شبکه برنده شود، یا زمانی که کل شبکه پر شود.

در این تمرین فرض می‌کنیم که بازی با X شروع می‌شود.

کار شما این است که مشخص کنید یک بازی داده‌شده در چه وضعیتی قرار دارد.

سه وضعیت ممکن برای بازی وجود دارد:

  • وضعیت بازی ongoing است.
  • بازی با draw به پایان رسیده است.
  • بازی با win به پایان رسیده است.

اگر صفحه‌ی داده‌شده نامعتبر باشد، خطای مناسبی پرتاب کنید.

اگر یک صفحه شرایط زیر را داشته باشد، نامعتبر است:

  • صفحه‌ی داده‌شده با رعایت ترتیب درست نوبت‌ها قابل‌دسترس نیست (یادتان باشد که 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
___|___|___
   |   |
   |   |
   |   |

پیام‌های استثنا

گاهی لازم است یک استثنا را raise کنید. وقتی این کار را می‌کنید، همیشه باید یک پیام خطای معنادار اضافه کنید تا نشان دهید منبع خطا چیست. این کار کد شما را خواناتر می‌کند و به Debug کردن بسیار کمک می‌کند. در موقعیت‌هایی که می‌دانید منبع خطا نوع مشخصی دارد، می‌توانید یکی از انواع خطای داخلی را raise کنید، اما باز هم باید پیام معناداری اضافه کنید.

یک بازی معتبر Tic Tac Toe وقتی تمام می‌شود که یک بازیکن برنده شود. اگر هر دو بازیکن در وضعیت برنده باشند، این تمرین از شما می‌خواهد که از دستور raise استفاده کنید و در راه‌حل خود یک ValueError «پرتاب» کنید. همچنین اگر تشخیص داده شود که یک بازیکن دو نوبت پشت سر هم بازی کرده است، یا حرکت اول را انجام داده در حالی که قرار بود حرکت دوم را انجام دهد، انتظار می‌رود کد شما یک ValueError پرتاب کند.

برای raise کردن یک 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")

تست‌ها تطابق دقیق پیام خطا را بررسی می‌کنند، پس لطفاً نتایج مورد انتظار را با دقت بخوانید.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید وضعیت بازی دوز را شروع کنید؟

در Exercism ثبت‌نام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.