Rendu de monnaie avec 3 types de pièces⚓︎
On s'intéresse au problème du rendu d'une quantité somme_a_rendre
de monnaie.
On suppose qu'on dispose d'un nombre infini
- de billets de 5 euros,
- de pièces de 2 euros
- et de pièces de 1 euro.
Le but est d'écrire une fonction nommée rendu
dont le paramètre est un entier positif somme_a_rendre
qui renvoie un tuple de trois entiers qui correspondent aux nombres de billets de 5 euros de pièces de 2 euros et de pièces de 1 euro à rendre afin que le total rendu soit égal à somme_a_rendre
, avec le moins de billets et de pièces possible.
On commencera par rendre le nombre maximal de billets de 5 euros, puis celui des pièces de 2 euros et enfin celui des pièces de 1 euro.
Exemples
- Pour rendre 7 €, on rend 1 billet de 5 €, 1 pièce de 2 € et 0 pièce de 1 €.
>>> rendu(7)
(1, 1, 0)
- Pour rendre 10 €, on rend 2 billets de 5 €.
- Pour rendre 13 €, on rend 2 billets de 5 €, une pièce de 2 € et une pièce de 1 €.
- Pour rendre 32 €, on rend 6 billets de 5 € et une pièce de 2 €.
>>> rendu(10)
(2, 0, 0)
>>> rendu(13)
(2, 1, 1)
>>> rendu(32)
(6, 1, 0)
def rendu(sommepy-undapy-undrendre):bksl-nl ...bksl-nlbksl-nlbksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert tuple(rendu( 7)) == (1, 1, 0)bksl-nlassert tuple(rendu(10)) == (2, 0, 0)bksl-nlassert tuple(rendu(13)) == (2, 1, 1)bksl-nlassert tuple(rendu(32)) == (6, 1, 0)bksl-nlbksl-nldef rendu(sommepy-undapy-undrendre):bksl-nl npy-und5 = sommepy-undapy-undrendre // 5bksl-nl sommepy-undapy-undrendre -= 5 py-str npy-und5bksl-nlbksl-nl npy-und2 = sommepy-undapy-undrendre // 2bksl-nl sommepy-undapy-undrendre -= 2 py-str npy-und2bksl-nlbksl-nl npy-und1 = sommepy-undapy-undrendrebksl-nl bksl-nl return (npy-und5, npy-und2, npy-und1)bksl-nlbksl-nl
A
Version, avec divmod
⚓︎
La fonction divmod
renvoie le quotient et le reste d'une division entière.
def rendu(somme_a_rendre):
n_5, somme_a_rendre = divmod(somme_a_rendre, 5)
n_2, somme_a_rendre = divmod(somme_a_rendre, 2)
n_1 = somme_a_rendre
return (n_5, n_2, n_1)
Version avec une boucle⚓︎
VALEURS = (5, 2, 1)
def rendu(somme_a_rendre):
resultat = [0] * len(valeurs)
for i in range(len(valeurs)):
resultat[i], somme_a_rendre = divmod(somme_a_rendre, VALEURS[i])
return tuple(retour)
Cette dernière version est utile si on envisage un autre système de pièces avec de nombreuses valeurs.
Z