Nel mistico villaggio di Coinholt sei dietro il bancone della tua panetteria e stai sistemando una nuova infornata di pasticcini. La porta si apre cigolando ed entra Denara, una mercante esperta con un occhio attento per la merce di qualità. Dopo un pasto veloce, fa scivolare sul bancone una moneta scintillante, che rappresenta un valore di 100 unità.
Sorridi, prendi la moneta e dai un'occhiata al costo totale del pasto: 88 unità. Questo significa che devi restituire 12 unità di resto.
Denara tende la mano, in attesa. «Dammi solo il minor numero di monete», dice con un sorriso. «La mia borsa è già piena e non voglio rischiare di perderle per strada.»
Sai di avere qualche opzione. «Per il resto abbiamo Lumis (dal valore di 10 unità), Viras (dal valore di 5 unità) e Zenth (dal valore di 2 unità).»
Calcoli rapidamente le possibilità a mente:
«La scelta migliore è due monete: una Lumis e uno Zenth», dici, porgendole il resto.
Denara sorride, chiaramente impressionata. «Come sempre, ci hai preso.»
Determina il minor numero di monete da dare a un cliente in modo che la somma dei loro valori sia pari all'importo esatto del resto.
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 notevolmente il debug. Nei casi in cui sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore predefiniti, ma dovresti comunque includere un messaggio significativo.
Questo particolare esercizio richiede che tu usi l'istruzione raise per «lanciare» un ValueError quando non è possibile dare il resto con le monete fornite. I test passeranno solo se usi raise con l'exception e vi includi un messaggio.
Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo exception:
# example when change cannot be made with the coins passed in
raise ValueError("can't make target with given coins")
Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.