Parcours
/
Python
Python
/
Exercices
/
Rendu de monnaie
Rendu de monnaie

Rendu de monnaie

Moyen

Introduction

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 :

  • un Lumis (1 × 10 unités) + un Zenth (1 × 2 unités) = 2 pièces au total
  • deux Viras (2 × 5 unités) + un Zenth (1 × 2 unités) = 3 pièces au total
  • six Zenths (6 × 2 unités) = 6 pièces au total

« 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. »

Instructions

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.

Exemples

  • Un montant de 15 avec les valeurs de pièces disponibles [1, 5, 10, 25, 100] doit renvoyer une pièce de valeur 5 et une pièce de valeur 10, ou [5, 10].
  • Un montant de 40 avec les valeurs de pièces disponibles [1, 5, 10, 25, 100] doit renvoyer une pièce de valeur 5, une pièce de valeur 10 et une pièce de valeur 25, ou [5, 10, 25].

Messages d'exception

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")
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Python Exercism

Prêt à commencer Rendu de monnaie ?

Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.