Na aldeia mística de Coinholt, estás atrás do balcão da tua padaria, a arrumar uma fornada fresca de pastéis. A porta abre-se com um rangido e entra Denara, uma comerciante habilidosa com bom olho para produtos de qualidade. Depois de uma refeição rápida, desliza uma moeda cintilante pelo balcão, com um valor de 100 unidades.
Sorris, pegas na moeda e olhas para o custo total da refeição: 88 unidades. Isso significa que tens de devolver 12 unidades de troco.
Denara estende a mão, à espera. «Dá-me só o menor número de moedas», diz ela com um sorriso. «A minha bolsa já está cheia e não quero correr o risco de as perder pelo caminho.»
Sabes que tens algumas opções. «Temos Lumis (valem 10 unidades), Viras (valem 5 unidades) e Zenth (valem 2 unidades) disponíveis para troco.»
Calculas rapidamente as possibilidades de cabeça:
«A melhor escolha são duas moedas: um Lumis e um Zenth», dizes, enquanto lhe entregas o troco.
Denara sorri, claramente impressionada. «Como sempre, acertaste.»
Determina o menor número de moedas a dar a um cliente para que a soma dos seus valores seja igual à quantia correta de troco.
Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso na depuração. Nas situações em que sabes que a origem do erro será de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves incluir na mesma uma mensagem significativa.
Este exercício em particular exige que uses a instrução raise para "lançar" um ValueError quando não for possível fazer troco com as moedas dadas. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.
Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:
# example when change cannot be made with the coins passed in
raise ValueError("can't make target with given coins")
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.