Na vila mística de Coinholt, você está atrás do balcão da sua padaria, arrumando uma fornada fresca de doces. A porta abre com um rangido, e entra Denara, uma mercadora habilidosa, com bom olho para mercadorias de qualidade. Depois de uma refeição rápida, ela desliza uma moeda reluzente pelo balcão, que vale 100 unidades.
Você sorri, pega a moeda e dá uma olhada no custo total da refeição: 88 unidades. Ou seja, você precisa devolver 12 unidades de troco.
Denara estende a mão, na expectativa. "Me dê só o menor número de moedas", ela diz com um sorriso. "Minha bolsa já está cheia, e não quero correr o risco de perdê-las pelo caminho."
Você sabe que tem algumas opções. "Temos Lumis (vale 10 unidades), Viras (vale 5 unidades) e Zenth (vale 2 unidades) disponíveis para troco."
Você calcula rapidamente as possibilidades de cabeça:
"A melhor escolha são duas moedas: uma Lumis e uma Zenth", você diz, entregando o troco a ela.
Denara sorri, claramente impressionada. "Como sempre, você acertou."
Determine o menor número de moedas a serem dadas a um cliente, de modo que a soma dos valores delas seja igual ao valor correto do troco.
Às vezes é necessário lançar uma exceção. Quando você faz isso, deve sempre incluir uma mensagem de erro significativa para indicar qual é a origem do erro. Isso deixa seu código mais legível e ajuda bastante na depuração. Quando você sabe que a origem do erro é de um tipo específico, pode optar por lançar um dos tipos de erro internos, mas ainda assim deve incluir uma mensagem significativa.
Este exercício em particular pede que você use a instrução raise para "lançar" um ValueError quando não for possível fazer o troco com as moedas dadas. Os testes só vão passar se você fizer raise da exception e incluir uma mensagem junto.
Para lançar um ValueError com uma mensagem, escreva a mensagem como argumento para o tipo exception:
# example when change cannot be made with the coins passed in
raise ValueError("can't make target with given coins")
Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.