Parcours
/
Python
Python
/
Exercices
/
Attaque de la dame
Attaque de la dame

Attaque de la dame

Facile

Instructions

À 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 :­

Un échiquier avec deux dames. Des flèches partant de la dame en c5 indiquent les directions de prise possibles le long des colonnes, des rangées et des diagonales.

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.

Crédits

L'image de l'échiquier a été réalisée par habere-et-dispertire avec LaTeX et le paquet chessboard d'Ulrike Fischer.

Messages d'erreur

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")
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Python Exercism

Prêt à commencer Attaque de la dame ?

Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.