In dieser Übung implementierst du ein Programm, das den Zustand eines tic-tac-toe-Spiels bestimmt. (Vielleicht kennst du das Spiel auch als „noughts and crosses" oder „Xs and Os".)
Das Spiel wird auf einem 3×3-Raster gespielt.
Die Spieler setzen abwechselnd Xs und Os auf das Raster.
Das Spiel endet, wenn ein Spieler gewinnt, indem er drei seiner Markierungen in einer Reihe, einer Spalte oder einer Diagonale des Rasters platziert, oder wenn das gesamte Raster gefüllt ist.
In dieser Übung gehen wir davon aus, dass X beginnt.
Deine Aufgabe ist es, festzustellen, in welchem Zustand sich ein gegebenes Spiel befindet.
Es gibt drei mögliche Spielzustände:
Wenn das gegebene Spielfeld ungültig ist, wirf einen passenden Fehler.
Ein Spielfeld ist ungültig, wenn es die folgenden Bedingungen erfüllt:
X beginnt). | |
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
___|___|___
| |
| |
| |
Manchmal ist es notwendig, eine Ausnahme auszulösen. Wenn du das tust, solltest du immer eine aussagekräftige Fehlermeldung angeben, die zeigt, woher der Fehler stammt. Das macht deinen Code lesbarer und hilft beim Debuggen erheblich. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ ist, kannst du einen der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Meldung angeben.
Ein gültiges Spiel Tic Tac Toe endet, wenn ein Spieler gewinnt.
Wenn sich beide Spieler in einem gewinnenden Zustand befinden, erwartet diese Übung, dass du die raise-Anweisung verwendest und in deiner Lösung einen ValueError „wirfst“.
Dein Code soll außerdem einen ValueError werfen, wenn bei einem Spieler festgestellt wird, dass er zwei Züge hintereinander gespielt hat, oder dass er den ersten Zug gespielt hat, obwohl ihm der zweite Zug zugewiesen war.
Um einen ValueError mit einer Meldung zu werfen, schreibst du die Meldung als Argument an den Typ 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")
Die Tests prüfen auf eine exakte Übereinstimmung der Fehlermeldung. Lies dir die erwarteten Ergebnisse deshalb sorgfältig durch.
Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.