Campo di fiori è una rivisitazione gentile del popolare gioco Minesweeper. Lo scopo del gioco è trovare tutti i fiori del giardino usando gli indizi numerici che indicano quanti fiori sono direttamente adiacenti (in orizzontale, in verticale, in diagonale) a una casella. «Campo di fiori» è stato distribuito nelle versioni regionali di Microsoft Windows in Italia, Germania, Corea del Sud, Giappone e Taiwan.
Il tuo compito è aggiungere il numero di fiori alle caselle vuote di un giardino del Campo di fiori completato.
Il giardino stesso è una griglia rettangolare composta da caselle che possono essere vuote (' ') oppure contenere un fiore ('*').
Per ogni casella vuota, conta il numero di fiori adiacenti (in orizzontale, in verticale, in diagonale). Se la casella vuota non ha fiori adiacenti, lasciala vuota. Altrimenti sostituiscila con il numero di fiori adiacenti.
Ad esempio, potresti ricevere una griglia 5 x 4 come questa (qui gli spazi vuoti sono rappresentati con il carattere «·» per la visualizzazione sullo schermo):
·*·*·
··*··
··*··
·····
Che il codice dovrebbe trasformare in questa:
1*3*1
13*31
·2*2·
·111·
A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo che indichi qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta molto nel 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 esercizio in particolare richiede che tu usi l'istruzione raise per «lanciare» un ValueError quando la funzione board() riceve un input malformato. I test passeranno solo se sollevi l'exception con raise e includi anche un messaggio.
Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento al tipo exception:
# when the board receives malformed input
raise ValueError("The board is invalid with current input.")
Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.
Esploriamo i cicli for annidati, l'uso intelligente di min/max per semplificare il controllo dei limiti, le pipeline funzionali e l'uso di matrici bidimensionali.