À partir de la position de deux dames sur un échiquier, indique si elles sont placées de manière à pouvoir s'attaquer l'une l'autre.
Au jeu d'échecs, une dame peut attaquer les pièces qui se trouvent sur la même rangée, la même colonne ou la même diagonale.
On peut représenter un échiquier par un tableau de 8 par 8.
Ainsi, si on te dit que la dame blanche se trouve en c5 (colonne 2, rangée 3, en comptant à partir de zéro) et la dame noire en f2 (colonne 5, rangée 6, en comptant à partir de zéro), tu sais alors que la disposition est la suivante :
Tu peux aussi déterminer si les dames peuvent s'attaquer l'une l'autre. Dans ce cas, la réponse serait oui, elles le peuvent, car les deux pièces partagent une diagonale.
L'image de l'échiquier a été réalisée par habere-et-dispertire avec LaTeX et le paquet chessboard d'Ulrike Fischer.
Il est parfois nécessaire de lever une exception. Quand tu le fais, il faut toujours inclure un message d'erreur explicite qui indique l'origine de l'erreur. Cela rend ton code plus lisible et facilite grandement le débogage. Dans les cas où tu sais que l'origine de l'erreur sera d'un certain type, tu peux choisir de lever l'un des types d'erreur intégrés, mais il faut quand même inclure un message explicite.
Cet exercice exige en particulier que tu utilises l'instruction raise pour « lancer » des ValueErrors quand on passe au constructeur Queen des nombres négatifs, ou des nombres qui ne correspondent pas à une ligne ou à une colonne valide. Les tests ne passeront que si tu raise l'exception et que tu y joins un message. Tu dois aussi raise une ValueError si les deux dames passées à la méthode can_attack() se trouvent sur la même case.
Pour lever une ValueError avec un message, écris le message comme argument du type 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")
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.