Je suis en train d'apprendre Python (cours officiel : CH1,"Pas à pas vers la modularité") et pour m’entraîner au module, je réalise une fonction qui me calcul l'argent dans ma tirelire au centime prêt. Voilà le code :
Ta fonction pourrait recevoir un nombre arbitraire d'arguments nommés (**kwargs), et tu utiliserais un dictionnaire de correspondances pour savoir combien vaut chaque pièce/billet en euros.
Ta fonction pourrait recevoir un nombre arbitraire d'arguments nommés (**kwargs), et tu utiliserais un dictionnaire de correspondances pour savoir combien vaut chaque pièce/billet en euros.
- Edité par entwanne il y a environ 1 heure
Merci pour votre réponse. Je verrai ça dans les prochains chapitres, je suppose ?
On peut le faire de plusieurs façons, mais si tu n'es encore qu'à des choses simples tu peux juste passer en argument une liste contenant les 15 valeurs:
print(total([0, 0, 1, 1, 1, 2, 3, 0, 0, 4, 2, 4, 0, 2, 7]))
#Par contre même si tu n'as qu'un seul billet, il faudra mettre les 15 valeurs
print(total([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
#Ou au moins celles qui se trouvent avant (grâce au fonctionnement de zip)
print(total([0, 0, 0, 0, 0, 1]))
from collections import Counter
def tirelire(*args, monnaie=[500,200,100,50,20,10,5,2,1,.5,.2,.1,.05,.02,.01]):
assert all(x in monnaie for x in args), \
"Monnaie invalide {param}".format(param=[x for x in args if x not in monnaie])
dict=Counter(args)
return round( sum(key*dict[key] for key in dict.keys()) , 2 )
ligne 1 : j'importe la classe Counter du module collections. C'est un dictionnaire «qui compte» ligne 3 : *args c'est la liste des paramètres non nommés, le paramètre nommé monnaie est la liste des monnaies valides (de la grosse coupure de 500€ à la pièce de 1 centime). lignes 4/5 je vérifie que tous les paramètres passés à la fonction font bien partie des monnaies valides et si ce n'est pas le cas on s'interrompt avec un message d'erreur ligne 6 : je crée le dictionnaire qui compte les occurrences de chaque paramètre non nommé. Par exemple avec les paramètres 10,10,5,20,5,0.1,5 on obtient {10:2, 5:3, 0.1:1} car on a 2 fois 10, 3 fois 5 et une seule fois 0.1. ligne 7 : je fais le calcul, d'abord on multiplie chaque clé du dictionnaire avec le compte, puis on additionne le tout. Comme le résultat sera un flottant pour éviter quelques glitches à l'affichage on limite le nombre de décimales à 2
Edit: code modifié suite à la judicieuse remarque d'Olygrim.
- Edité par PicoDev 26 octobre 2016 à 22:01:22
First solve the problem. Then, write the code. ~ John Johnson
Perso j'utiliserais un dict dont les clés sont les valeurs des billets et pièces, tout simplement.
Raccourcir le code d'une fonction
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
Python c'est bon, mangez-en.