Track
/
Python
Python
/
Esercizi
/
Attacco della regina
Attacco della regina

Attacco della regina

Facile

Istruzioni

Date le posizioni di due regine su una scacchiera, indica se sono posizionate in modo da potersi attaccare a vicenda.

Nel gioco degli scacchi, una regina può attaccare i pezzi che si trovano sulla stessa riga, colonna o diagonale.

Una scacchiera può essere rappresentata da un array 8 per 8.

Quindi, se ti viene detto che la regina bianca si trova in c5 (con indici a partire da zero: colonna 2, riga 3) e la regina nera in f2 (con indici a partire da zero: colonna 5, riga 6), allora sai che la disposizione è questa:

Una scacchiera con due regine. Le frecce che partono dalla regina in c5 indicano le possibili direzioni di cattura lungo colonna, traversa e diagonale.

Puoi anche rispondere se le regine possono attaccarsi a vicenda. In questo caso, la risposta sarebbe sì, possono, perché entrambi i pezzi condividono una diagonale.

Crediti

L'immagine della scacchiera è stata realizzata da habere-et-dispertire usando LaTeX ed il pacchetto chessboard di Ulrike Fischer.

Messaggi di eccezione

A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo per indicare qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta notevolmente il debug. Nelle situazioni in cui sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore integrati, ma dovresti comunque includere un messaggio significativo.

Questo particolare esercizio richiede di usare l'istruzione raise per «lanciare» dei ValueError quando al costruttore Queen vengono passati numeri negativi, o numeri che non corrispondono a una riga o a una colonna valida. I test passeranno solo se fai il raise dell'exception ed includi anche un messaggio con essa. Dovresti anche fare raise di un ValueError se entrambe le regine passate al metodo can_attack() si trovano nella stessa posizione.

Per sollevare un ValueErrors con un messaggio, scrivi il messaggio come argomento 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")
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Attacco della regina?

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