Track
/
Python
Python
/
Esercizi
/
Stato del tris
Stato del tris

Stato del tris

Facile

Istruzioni

In questo esercizio implementerai un programma che determina lo stato di una partita a tris. (Potresti anche conoscere il gioco come «noughts and crosses» o «Xs and Os».)

La partita si gioca su una griglia 3×3. I giocatori, a turno, posizionano X e O sulla griglia. La partita termina quando un giocatore vince posizionando tre dei suoi simboli in una riga, in una colonna o lungo una diagonale della griglia, oppure quando l'intera griglia è piena.

In questo esercizio assumeremo che inizi X.

Il tuo compito è determinare in quale stato si trova una data partita.

Ci sono 3 possibili stati di gioco:

  • La partita è ongoing.
  • La partita è finita in draw.
  • La partita è finita in win.

Se la griglia fornita non è valida, lancia un errore appropriato.

Una griglia è non valida se soddisfa le seguenti condizioni:

  • La griglia fornita non può essere raggiunta se i turni vengono giocati nell'ordine corretto (ricorda che inizia X).
  • La partita è stata giocata dopo che era già terminata.

Esempi

Partita in corso

   |   |
 X |   |
___|___|___
   |   |
   | X | O
___|___|___
   |   |
 O | X |
   |   |

Pareggio

   |   |
 X | O | X
___|___|___
   |   |
 X | X | O
___|___|___
   |   |
 O | X | O
   |   |

Vittoria

   |   |
 X | X | X
___|___|___
   |   |
   | O | O
___|___|___
   |   |
   |   |
   |   |

Non valida

Ordine dei turni errato
   |   |
 O | O | X
___|___|___
   |   |
   |   |
___|___|___
   |   |
   |   |
   |   |
Gioco proseguito dopo la vittoria
   |   |
 X | X | X
___|___|___
   |   |
 O | O | O
___|___|___
   |   |
   |   |
   |   |

Messaggi di eccezione

A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo che indichi qual è l'origine dell'errore. Così il codice è più leggibile e il debugging ne trae un grande vantaggio. Quando sai che l'origine dell'errore è di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore predefiniti, ma dovresti comunque includere un messaggio significativo.

Una partita valida di Tic Tac Toe termina quando un giocatore vince. Se entrambi i giocatori sono in una situazione di vittoria, questo esercizio si aspetta che tu usi l'istruzione raise e «lanci» un ValueError nella soluzione. Il codice deve anche lanciare un ValueError se un giocatore risulta aver giocato due turni di seguito, oppure aver giocato la prima mossa quando gli era stato assegnato di giocare la seconda.

Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo 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")

I test verificheranno che il messaggio di errore corrisponda esattamente, quindi leggi con attenzione i risultati attesi.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Stato del tris?

Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.