Ebben a feladatban egy olyan programot fogsz megvalósítani, amely megállapítja egy tic-tac-toe játék állását. (A játékot „noughts and crosses” vagy „Xs and Os” néven is ismerheted.)
A játékot egy 3×3-as rácsban játsszák.
A játékosok felváltva X-et és O-t tesznek a rácsra.
A játék akkor ér véget, amikor az egyik játékos nyer azzal, hogy három jelét egy sorban, oszlopban vagy a rács egyik átlója mentén helyezi el, illetve amikor az egész rács megtelik.
Ebben a feladatban feltételezzük, hogy X kezd.
A te feladatod eldönteni, hogy egy adott játék melyik állapotban van.
Három lehetséges játékállapot van:
Ha a megadott tábla érvénytelen, dobj egy megfelelő hibát.
Egy tábla érvénytelen, ha teljesíti a következő feltételeket:
X kezd). | |
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
___|___|___
| |
| |
| |
Néha szükség lehet arra, hogy kivételt dobj. Amikor ezt teszed, mindig adj meg egy beszédes hibaüzenetet, amely jelzi, mi a hiba forrása. Ettől olvashatóbb lesz a kódod, és ez jelentősen megkönnyíti a hibakeresést. Ha tudod, hogy a hiba forrása egy adott típusú lesz, választhatod, hogy a beépített hibatípusok egyikét dobod, de ilyenkor is adj meg beszédes üzenetet.
Egy érvényes Tic Tac Toe játék akkor ér véget, amikor az egyik játékos nyer.
Ha mindkét játékos nyerő állásban van, ez a feladat azt várja el, hogy a raise utasítást használd, és a megoldásodban „dobj” egy ValueError-t.
A kódodnak akkor is ValueError-t kell dobnia, ha az egyik játékosról kiderül, hogy két egymást követő körben lépett, vagy hogy ő tette meg az első lépést, pedig a második lépésre volt kijelölve.
Ha egy ValueError-t üzenettel együtt szeretnél dobni, írd le az üzenetet az exception típus argumentumaként:
# 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")
A tesztek a hibaüzenet pontos egyezését ellenőrzik, ezért figyelmesen olvasd el a várt eredményeket.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.