Dans le village mystique de Coinholt, tu te tiens derrière le comptoir de ta boulangerie, où tu disposes une nouvelle fournée de pâtisseries. La porte s'ouvre en grinçant, et Denara entre : une marchande habile, qui a l'œil pour reconnaître la marchandise de qualité. Après un repas rapide, elle fait glisser sur le comptoir une pièce chatoyante, d'une valeur de 100 unités.
Tu souris, prends la pièce et jettes un œil au coût total du repas : 88 unités. Cela veut dire que tu dois rendre 12 unités en monnaie.
Denara tend la main, visiblement dans l'attente. « Donne-moi simplement le moins de pièces possible », dit-elle en souriant. « Ma bourse est déjà pleine, et je ne veux pas risquer de les perdre en chemin. »
Tu sais que tu as plusieurs possibilités. « Nous avons des Lumis (qui valent 10 unités), des Viras (5 unités) et des Zenths (2 unités) pour la monnaie. »
Tu calcules rapidement les possibilités dans ta tête :
« Le meilleur choix, c'est deux pièces : un Lumis et un Zenth », dis-tu en lui tendant la monnaie.
Denara sourit, visiblement impressionnée. « Comme toujours, tu as vu juste. »
Détermine le plus petit nombre de pièces à rendre à un client pour que la somme de leurs valeurs soit égale au montant correct de la monnaie.
Il est parfois nécessaire de lever une exception. Dans ce cas, tu dois toujours inclure un message d'erreur explicite pour indiquer l'origine de l'erreur. Cela rend le code plus lisible et facilite grandement le débogage. Quand tu sais que l'erreur vient d'un type précis, tu peux choisir de lever l'un des types d'erreur intégrés, mais tu dois tout de même inclure un message explicite.
Cet exercice demande en particulier d'utiliser l'instruction raise pour « lever » une ValueError quand on ne peut pas rendre la monnaie avec les pièces données. Les tests ne passeront que si tu lèves l'exception avec raise et que tu y ajoutes un message.
Pour lever une ValueError avec un message, écris ce message en argument du type de l'exception :
# example when change cannot be made with the coins passed in
raise ValueError("can't make target with given coins")
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.