Dans cet exercice, tu vas implémenter un programme qui détermine l'état d'une partie de tic-tac-toe. (Tu connais peut-être aussi ce jeu sous le nom de « morpion ».)
Le jeu se joue sur une grille de 3×3.
Les joueurs placent à tour de rôle des X et des O sur la grille.
La partie se termine quand un joueur a gagné en alignant trois de ses marques sur une ligne, une colonne ou une diagonale de la grille, ou quand la grille est entièrement remplie.
Dans cet exercice, on suppose que c'est X qui commence.
À toi de déterminer dans quel état se trouve une partie donnée.
Il y a 3 états possibles pour une partie :
Si le plateau donné est invalide, lève une erreur appropriée.
Un plateau est invalide s'il remplit les conditions suivantes :
X qui commence). | |
X | |
___|___|___
| |
| X | O
___|___|___
| |
O | X |
| |
| |
X | O | X
___|___|___
| |
X | X | O
___|___|___
| |
O | X | O
| |
| |
X | X | X
___|___|___
| |
| O | O
___|___|___
| |
| |
| |
| |
O | O | X
___|___|___
| |
| |
___|___|___
| |
| |
| |
| |
X | X | X
___|___|___
| |
O | O | O
___|___|___
| |
| |
| |
Parfois, il est nécessaire de lever une exception. Quand tu fais cela, tu dois 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. Pour les situations où tu sais que l'origine de l'erreur sera d'un type précis, tu peux choisir de lever l'un des types d'erreurs intégrés, mais tu dois quand même inclure un message explicite.
Une partie de Tic Tac Toe valide se termine quand un joueur gagne.
Si les deux joueurs sont en position gagnante, cet exercice attend que tu utilises l'instruction raise pour « lever » une ValueError dans ta solution.
Ton code doit aussi lever une ValueError si un joueur est considéré comme ayant joué deux tours d'affilée, ou comme ayant joué le premier coup alors qu'il devait jouer le second.
Pour lever une ValueError avec un message, écris le message comme argument du type exception :
# Example when player O goes before player X.
raise ValueError("Wrong turn order: O started")
# Example when player X goes twice.
raise ValueError("Wrong turn order: X went twice")
# Example when player X wins AND player O wins.
raise ValueError("Impossible board: game should have ended after the game was won")
Les tests vérifient que le message d'erreur correspond exactement, alors lis attentivement les résultats attendus.
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.