За позиціями двох ферзів на шахівниці визначмо, чи розташовані вони так, що можуть атакувати одна одну.
У шахах ферзь може атакувати фігури, які стоять в одному рядку, стовпці або на одній діагоналі.
Шахівницю можна подати як масив 8 на 8.
Отже, якщо відомо, що білий ферзь стоїть на c5 (з індексацією від нуля: стовпець 2, рядок 3), а чорний ферзь на f2 (стовпець 5, рядок 6), то розташування має такий вигляд:
Також можна відповісти, чи можуть ферзі атакувати один одного. У цьому випадку відповідь буде ствердною: так, можуть, бо обидві фігури стоять на одній діагоналі.
Зображення шахівниці створив habere-et-dispertire за допомогою LaTeX та пакета chessboard Ульріке Фішер.
Іноді виникає потреба підняти виняток. Коли ми це робимо, завжди варто додати змістовне повідомлення про помилку, яке вказує, у чому її причина. Це робить код зрозумілішим і суттєво допомагає з налагодженням. Якщо відомо, що джерело помилки матиме певний тип, можна підняти один із вбудованих типів помилок, але змістовне повідомлення все одно варто додати.
У цій вправі потрібно використати інструкцію raise, щоб «кинути» ValueErrors, якщо в конструктор Queen передати відʼємні числа або числа, які не є допустимими рядком чи стовпцем. Тести пройдуть лише за умови, що ми і зробимо raise для exception, і додамо до нього повідомлення. Також потрібно підняти ValueError, якщо обидві королеви, передані в метод can_attack(), розташовані в одній клітинці.
Щоб підняти 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")
Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.