با توجه به موقعیت دو وزیر روی یک تختهی شطرنج، مشخص کنید که آیا آنها طوری قرار گرفتهاند که بتوانند به یکدیگر حمله کنند یا نه.
در بازی شطرنج، وزیر میتواند به مهرههایی حمله کند که در همان سطر، ستون یا قطر قرار دارند.
یک تختهی شطرنج را میتوان با یک آرایهی ۸ در ۸ نمایش داد.
پس اگر به شما بگویند وزیر سفید در c5 است (با اندیس صفر در ستون ۲ و سطر ۳) و وزیر سیاه در f2 (با اندیس صفر در ستون ۵ و سطر ۶)، آنوقت میدانید که چیدمان به این شکل است:
شما همچنین میتوانید پاسخ دهید که آیا وزیرها میتوانند به یکدیگر حمله کنند یا نه. در این حالت، پاسخ بله است؛ آنها میتوانند، چون هر دو مهره روی یک قطر مشترک قرار دارند.
تصویر تختهی شطرنج را 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")