Rutas
/
Python
Python
/
Ejercicios
/
Ataque de reina
Ataque de reina

Ataque de reina

Fácil

Instrucciones

Dada la posición de dos damas en un tablero de ajedrez, indica si están colocadas de forma que puedan atacarse entre sí.

En el ajedrez, una dama puede atacar las piezas que estén en la misma fila, columna o diagonal.

Un tablero de ajedrez se puede representar con un array de 8 por 8.

Así, si te dicen que la dama blanca está en c5 (indexado desde cero en la columna 2 y la fila 3) y la dama negra en f2 (indexado desde cero en la columna 5 y la fila 6), entonces ya sabes que la disposición es la siguiente:

Un tablero de ajedrez con dos damas. Las flechas que salen de la dama situada en c5 indican las posibles direcciones de captura por columna, fila y diagonal.

También puedes responder si las damas pueden atacarse entre sí. En este caso, la respuesta sería sí, pueden, porque ambas piezas comparten una diagonal.

Créditos

La imagen del tablero de ajedrez fue creada por habere-et-dispertire con LaTeX y el paquete chessboard de Ulrike Fischer.

Mensajes de excepción

A veces es necesario lanzar una excepción. Cuando lo hagas, siempre debes incluir un mensaje de error significativo para indicar 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í debes incluir un mensaje significativo.

Este ejercicio en concreto requiere que uses la instrucción raise para «lanzar» ValueErrors si al constructor Queen se le pasan números negativos, o números que no sean una fila o una columna válidas. Las pruebas solo pasarán si haces tanto el raise de la exception como si incluyes un mensaje con ella. También debes hacer raise de un ValueError si las dos reinas que se pasan al método can_attack() están en la misma casilla.

Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento del tipo exception:

# if the row parameter is negative
raise ValueError("row not positive")

# if the row parameter is not on the defined board
raise ValueError("row not on board")

# if the column parameter is negative
raise ValueError("column not positive")

# if the column parameter is not on the defined board
raise ValueError("column not on board")

# if both the queens are on the same location
raise ValueError("Invalid queen position: both queens in the same square")
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Python Exercism

¿Listo para empezar Ataque de reina?

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