Rutas
/
Python
Python
/
Ejercicios
/
Estado del tres en raya
Estado del tres en raya

Estado del tres en raya

Fácil

Instrucciones

En este ejercicio vas a implementar un programa que determina el estado de una partida de tic-tac-toe. (También es posible que conozcas este juego como «tres en raya» o «equis y ceros».)

El juego se juega en una cuadrícula de 3×3. Los jugadores se turnan para colocar las X y las O en la cuadrícula. El juego termina cuando un jugador gana al colocar tres de sus marcas en una fila, una columna o una diagonal de la cuadrícula, o cuando esta se llena por completo.

En este ejercicio, supondremos que empieza X.

Tu tarea es determinar en qué estado se encuentra una partida dada.

Hay 3 estados posibles de partida:

  • La partida está ongoing.
  • La partida terminó en draw.
  • La partida terminó en win.

Si el tablero dado no es válido, lanza un error adecuado.

Un tablero no es válido si cumple las siguientes condiciones:

  • No se puede llegar al tablero dado si los turnos se juegan en el orden correcto (recuerda que empieza X).
  • Se jugó después de que la partida ya hubiera terminado.

Ejemplos

Partida en curso

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

Empate

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

Victoria

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

No válido

Orden de turnos incorrecto
   |   |
 O | O | X
___|___|___
   |   |
   |   |
___|___|___
   |   |
   |   |
   |   |
Continuar jugando después de ganar
   |   |
 X | X | X
___|___|___
   |   |
 O | O | O
___|___|___
   |   |
   |   |
   |   |

Mensajes de excepción

A veces es necesario lanzar una excepción. Cuando lo hagas, siempre deberías incluir un mensaje de error significativo que indique cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho a la hora de depurar. En situaciones en las que sabes que el origen del error será de un tipo concreto, puedes optar por lanzar uno de los tipos de error integrados, pero aun así deberías incluir un mensaje significativo.

Una partida válida de Tic Tac Toe termina cuando un jugador gana. Si ambos jugadores están en un estado ganador, este ejercicio espera que uses la instrucción raise y «lances» un ValueError en tu solución. También se espera que tu código lance un ValueError si se determina que un jugador ha jugado dos turnos seguidos, o que ha jugado el primer movimiento cuando se le había asignado jugar el segundo.

Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento 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")

Los tests comprobarán que el mensaje de error coincida exactamente, así que lee con atención los resultados esperados.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Python Exercism

¿Listo para empezar Estado del tres en raya?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.