Tracks
/
Python
Python
/
Ejercicios
/
Estado del tres en línea
Estado del tres en línea

Estado del tres en línea

Fácil

Instrucciones

En este ejercicio vas a implementar un programa que determina el estado de una partida de tres en línea. (También puedes conocerlo como «noughts and crosses» o «Xs and Os».)

La partida se juega en una cuadrícula de 3×3. Las personas que juegan se turnan para colocar Xs y Os en la cuadrícula. El juego termina cuando alguien gana al colocar tres de sus marcas en una fila, una columna o una diagonal de la cuadrícula, o cuando se llena toda la cuadrícula.

En este ejercicio supondremos que X empieza.

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

Hay 3 estados posibles del juego:

  • 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 apropiado.

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

  • No se puede llegar al tablero dado si los turnos se toman en el orden correcto (recuerda que X empieza).
  • Se siguió jugando después de que la partida ya había 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
___|___|___
   |   |
   |   |
   |   |

Inválido

Orden de turnos incorrecto
   |   |
 O | O | X
___|___|___
   |   |
   |   |
___|___|___
   |   |
   |   |
   |   |
Se siguió jugando después de la victoria
   |   |
 X | X | X
___|___|___
   |   |
 O | O | O
___|___|___
   |   |
   |   |
   |   |

Mensajes de excepción

A veces es necesario lanzar una excepción. Cuando lo haces, siempre debes 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 con la depuración. En los casos en los que sabes que el origen del error será de un tipo determinado, puedes optar por lanzar uno de los tipos de error integrados, pero aun así debes incluir un mensaje significativo.

Una partida válida de Tic Tac Toe termina cuando uno de los jugadores gana. Si ambos jugadores están en un estado ganador, este ejercicio espera que uses la sentencia 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 jugó dos turnos seguidos, o que jugó el primer movimiento cuando le correspondía 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")

Las pruebas verificará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 una pestaña nuevas
Python Exercism

¿Todo listo para empezar Estado del tres en línea?

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