مینیاب یک بازی محبوب است که در آن کاربر باید مینها را با کمک نشانههای عددی پیدا کند. این نشانهها نشان میدهند که چند مین بهطور مستقیم (بهصورت افقی، عمودی یا قطری) با یک خانه مجاور است.
وظیفهی شما این است که در یک صفحهی مینیاب که کامل شده است، تعداد مینهای مجاور را به خانههای خالی اضافه کنید.
خود صفحه یک مستطیل است که از خانههایی تشکیل شده است که یا خالیاند (' ') یا مین ('*').
برای هر خانهی خالی، تعداد مینهای مجاور آن را بشمارید (بهصورت افقی، عمودی و قطری). اگر خانهی خالی هیچ مین مجاوری نداشته باشد، آن را خالی بگذارید. در غیر این صورت، آن را با تعداد مینهای مجاور جایگزین کنید.
برای مثال، ممکن است صفحهای ۵ در ۴ مانند این دریافت کنید (جاهای خالی در اینجا برای نمایش روی صفحه با نویسهی «·» نشان داده شدهاند):
·*·*·
··*··
··*··
·····
که کد شما باید آن را به این تبدیل کند:
1*3*1
13*31
·2*2·
·111·
گاهی لازم است یک «استثنا» ایجاد کنید. وقتی این کار را میکنید، همیشه باید یک پیام خطای معنادار بگنجانید تا نشان دهید منبع خطا چیست. این کار code شما را خواناتر میکند و به debug کمک قابل توجهی میکند. در موقعیتهایی که میدانید منبع خطا از یک نوع مشخص است، میتوانید یکی از انواع خطای داخلی را ایجاد کنید، اما باز هم باید پیامی معنادار بگنجانید.
این تمرین بهطور خاص میخواهد که وقتی تابع board() ورودی نادرست دریافت میکند، با دستور raise یک ValueError را «پرتاب» کنید. tests فقط وقتی قبول میشوند که هم exception را raise کنید و هم پیامی همراه آن بگنجانید.
برای ایجاد یک ValueError همراه با پیام، پیام را بهعنوان آرگومان نوع exception بنویسید:
# when the board receives malformed input
raise ValueError("The board is invalid with current input.")
در Exercism ثبتنام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.
حلقههای For تودرتو، استفادهی هوشمندانه از `min` و `max` برای ساده کردن بررسی محدودهها، پایپلاینهای تابعی و استفاده از ماتریسهای دوبعدی را بررسی میکنیم.