مسیرها
/
Python
Python
/
تمرین‌ها
/
حمله‌ی وزیر
حمله‌ی وزیر

حمله‌ی وزیر

آسان

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

با توجه به موقعیت دو وزیر روی یک تخته‌ی شطرنج، مشخص کنید که آیا آن‌ها طوری قرار گرفته‌اند که بتوانند به یکدیگر حمله کنند یا نه.

در بازی شطرنج، وزیر می‌تواند به مهره‌هایی حمله کند که در همان سطر، ستون یا قطر قرار دارند.

یک تخته‌ی شطرنج را می‌توان با یک آرایه‌ی ۸ در ۸ نمایش داد.

پس اگر به شما بگویند وزیر سفید در c5 است (با اندیس صفر در ستون ۲ و سطر ۳) و وزیر سیاه در f2 (با اندیس صفر در ستون ۵ و سطر ۶)، آن‌وقت می‌دانید که چیدمان به این شکل است:

یک تخته‌ی شطرنج با دو وزیر. پیکان‌هایی که از وزیر در c5 بیرون می‌آیند، جهت‌های ممکن حمله در طول ستون، ردیف و قطر را نشان می‌دهند.

شما همچنین می‌توانید پاسخ دهید که آیا وزیرها می‌توانند به یکدیگر حمله کنند یا نه. در این حالت، پاسخ بله است؛ آن‌ها می‌توانند، چون هر دو مهره روی یک قطر مشترک قرار دارند.

اعتبار

تصویر تخته‌ی شطرنج را habere-et-dispertire با استفاده از LaTeX و بسته‌ی chessboard ساخته‌ی Ulrike Fischer ساخته است.

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

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

این تمرین به‌طور خاص لازم می‌دارد که از دستور raise برای «پرتاب» ValueErrors استفاده کنید، هر وقت به سازنده‌ی Queen عددی منفی داده شود، یا عددی که سطر یا ستون معتبری نیست. تست‌ها فقط وقتی قبول می‌شوند که هم exception را raise کنید و هم پیامی همراه آن بفرستید. همچنین اگر هر دو وزیری که به متد can_attack() داده می‌شوند در یک خانه باشند، باید یک ValueError را raise کنید.

برای ایجاد یک 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.