IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

rendre monnaie avec le minimum de pièces et billets


Sujet :

Python

  1. #1
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut rendre monnaie avec le minimum de pièces et billets
    bonsoir,
    j'ai l’énoncé suivant:
    Considérons les billets et pièces de valeurs suivantes : 20 euros, 10 euros, 5 euros, 2 euros, 1 euros. Écrivez une fonction rendre_monnaie qui prend en paramètres un entier prix et cinq valeurs entières x20, x10, x5, x2, x1 représentant le nombre de billets et de pièces de chaque sorte que donne un client pour payer l’objet dont le prix est mentionné. La fonction doit renvoyer cinq valeurs représentant la somme qu’il faut rendre au client, décomposée en billets et pièces (dans le même ordre que précédemment). La décomposition doit être faite en rendant le plus possible de billets et pièces de grosses valeurs (éventuellement avec d'autres billets que ceux apportés par le client; on suppose qu'il y a toujours assez de billets chez le vendeur).
    Pour renvoyer les cinq valeurs, vous utilisez l'instruction:

    return res20, res10, res5, res2, res1
    où les cinq variables res20 à res1 contiennent les cinq valeurs à renvoyer (res20 contient le nombre de billets de 20 à remettre, ..., res1 le nombre de pièces de 1 à remettre).

    S'il manque de l'argent, la fonction renverra cinq valeurs None.


    j'ai essayé un peu mais je sent que je ne suis pas dans le bon chemin:ci joint le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def rendre_monnaie(prix, x20, x10, x5, x2, x1):
        while(prix>= x20):
            res20 = prix / 20
            if ((prix % 20) != 0):
                res10 = res20 / 10
            elif ((res20 % 10) != 0):
                res5 = res10 / 5
            elif ((res10 % 5) != 0):
                res2 = res5 / 2
            elif (res5 % 2 != 0):
                res1 = res2 / 1
            return res20, res10, res5, res2, res1

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 603
    Par défaut
    Bonjour,

    Les valeurs des billets représentent une variable (à votre niveau vous connaissez ) et une seule.

    Imaginons que vous deviez découper le prix en 400 billets de valeurs différentes, vous mettriez 400 arguments dans la fonction ?

    Il va falloir regarder de votre côté une manière algorithmique moins contraignante de résoudre votre problème, et cela n'est pas pour l'instant un problème python.

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Il faudrait faire la division euclidienne du prix par 20 (et non la division simple) d'abord :
    Exemples sur le reste et le quotient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    43%20 -> 3
    43//20 -> 2

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    On peut aussi utiliser la fonction divmod qui renvoit directement le quotient et le reste.

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 603
    Par défaut
    Une boucle et une soustraction peuvent suffirent

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Une boucle et une soustraction peuvent suffirent
    Aussi...

  7. #7
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Bonjour,

    Les valeurs des billets représentent une variable (à votre niveau vous connaissez ) et une seule.

    Imaginons que vous deviez découper le prix en 400 billets de valeurs différentes, vous mettriez 400 arguments dans la fonction ?

    Il va falloir regarder de votre côté une manière algorithmique moins contraignante de résoudre votre problème, et cela n'est pas pour l'instant un problème python.
    salut,
    c'est ce qui est demandé à l'énoncé:
    Écrivez une fonction rendre_monnaie qui prend en paramètres un entier prix et cinq valeurs entières x20, x10, x5, x2, x1 représentant le nombre de billets et de pièces de chaque sorte que donne un client pour payer l’objet dont le prix est mentionné.
    et le test ce fait par upylab donc il faut respecter l'entête

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 603
    Par défaut
    Il faudra prendre un site d'apprentissage python, qui vous fera travailler aussi l'algorithmie...

    Quelle valeur va prendre x20, x10, ... d'après vous ? Il semble que ces variables représentent le nombre de billets d'une valeur spécifique, donc 2 pour la variable x20 par exemple, représentera 2 billets de 20 distribués. Donc si j'ai bien compris votre code, vous oubliez la multiplication du nombre de billets par sa valeur, non ?

  9. #9
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    bonsoir,
    à ce niveau j'ai encore rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def rendre_monnaie(prix, x20, x10, x5, x2, x1):
        if (prix<x20):
            x20, x10, x5, x2, x1=None
        else:
            res20 = prix // 20
            while((divmod(prix,x20)!=0) or (divmod(prix,x10)!=0)or ((divmod(prix,x5)!=0)) or ((divmod(prix,x2)!=0))):
                res10 = res20 // 10
                res5 = res10 // 5
                res2 = res5 // 2
                res1 = res2 // 1
        return res20, res10, res5, res2, res1
     
    rendre_monnaie(100, 20, 10, 5, 2, 1)

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par FATENMRABET Voir le message
    salut,
    c'est ce qui est demandé à l'énoncé:
    Écrivez une fonction rendre_monnaie qui prend en paramètres un entier prix et cinq valeurs entières x20, x10, x5, x2, x1 représentant le nombre de billets et de pièces de chaque sorte que donne un client pour payer l’objet dont le prix est mentionné.
    et le test ce fait par upylab donc il faut respecter l'entête
    Dans ce cas, il faut déjà calculer que la somme d'argent donnée par le client est bien supérieure au prix de l'achat... puis calculer ce qu'il faut lui rendre et le traduire en nombre de billets/pièces.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    bonjour,

    en utilisant une boucle et divmod ça va tout seul (si j'ose dire), voici un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def rendre_monnaie(somme):
    	liste_valeur_billet= (20, 10, 5, 2, 1)
    	if somme <20:
    		return [None]*5
    	v_retour = {}
    	for value in liste_valeur_billet:
    		v_retour[value], somme = divmod(somme, value)
    	return list(v_retour.values())
    ps: j'ai édité le nom des variables pour qu'il n'y est pas d'ambiguïté entre v, values et value

  12. #12
    Membre éprouvé Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 153
    Par défaut
    Voici une solution , tu peux mettre la liste de billet que tu veux , toujours par ordre décroissant par contre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    def rendre_monnaie(prix) :
        global n
        global tot_billet 
        global listBillets
        billet = prix // listBillets[n]
        tot_billet
    [listBillets[n]] = billet
        prix  = prix - (listBillets[n] * billet )
        n = n + 1
        if prix == 0 :
            return True
        else :
            rendre_monnaie(prix)
    
    a= {}
    n = 0
    tot_billet = {}
    listBillets = [20, 10, 5, 2, 1]
    
    rendre_monnaie(257)
    print (tot_billet)
    -> {20: 12, 10: 1, 5: 1, 2: 1}

    PS : je ne comprend pas le retour à la ligne après tot_Billet ?? on dois bien lire tot_billet
    [listBillets[n]] = billet
    sur la meme ligne !!!

  13. #13
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def rendre_monnaie(somme=0, monnaie=[]) :
        global caisse, prix
        #print("===>", somme, monnaie) # décommenter pour voir la recherche 
        monnaie = monnaie[:] # recopie indispensable
        for n in caisse:
            if somme+n==prix:
                return somme+n, monnaie+[n]
            if somme+n<prix:
                return rendre_monnaie(somme+n, monnaie+[n])
        return 0, [] # si échec
    Il faut donner au départ la liste des pièces ou billets de la caisse (ordre décroissant des valeurs!), ainsi que le prix à payer.
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    caisse = [20, 10, 5, 2, 1]
    prix = 58
     
    somme, monnaie = rendre_monnaie()
    print("Payé:", somme, "Rendu:", monnaie)
    Ce qui donne dans ce cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Payé: 58 Rendu: [20, 20, 10, 5, 2, 1]
    Compte tenu du principe de la recherche, il me semble que le nombre de pièces ou billets rendu est mini. Mais j'ai supposé ici que le nombre de chaque pièce ou billet de la caisse n'est pas limité. S'il était limité, il y aurait bien entendu des possibilités d'échec.

    J'ai essayé cette fonction 1 million de fois avec des prix tirés au hasard , et je n'ai pas trouvé d'erreur.

    Voilà un exemple de test aléatoire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from random import randint
     
    caisse = [20, 10, 5, 2, 1]
     
    for i in range(0, 1000000):
        prix = randint(1,200)
        somme, monnaie = rendre_monnaie()
        print("prix:", prix, "payé:", somme, "monnaie:", monnaie)
        if somme!=sum(monnaie) or somme!=prix: # vérification de validité
            print("Echec!")
            break
    Ce qui donne par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    prix: 12 payé: 12 monnaie: [10, 2]
    prix: 114 payé: 114 monnaie: [20, 20, 20, 20, 20, 10, 2, 2]
    prix: 157 payé: 157 monnaie: [20, 20, 20, 20, 20, 20, 20, 10, 5, 2]
    prix: 14 payé: 14 monnaie: [10, 2, 2]
    prix: 1 payé: 1 monnaie: [1]
    prix: 117 payé: 117 monnaie: [20, 20, 20, 20, 20, 10, 5, 2]
    prix: 57 payé: 57 monnaie: [20, 20, 10, 5, 2]
    prix: 27 payé: 27 monnaie: [20, 5, 2]
    prix: 127 payé: 127 monnaie: [20, 20, 20, 20, 20, 20, 5, 2]
    prix: 157 payé: 157 monnaie: [20, 20, 20, 20, 20, 20, 20, 10, 5, 2]
    ...

  14. #14
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    merci pour toutes vos réponses,
    en fait l'énoncé est pour des novices c'est pourquoi les structures qui facilite la tâche que vous avez proposé ne marche pas pour cette énoncé voilà l'entête valide et le retour valide pour l'énoncé : mais malheureusement y a des erreurs Nom : erreur.PNG
Affichages : 9666
Taille : 33,4 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def rendre_monnaie(prix, x20, x10, x5, x2, x1 ):
        if prix <x20:
            res20= None
            res10= None
            res5= None
            res2= None
            res1= None
        else:
            res20 = prix//x20
            res10 = (prix%x20) //x10
            res5 = (prix%x10) //x5
            res2 = (prix%x5) //x2
            res1 = (prix%x2) //x1
        return res20,res10,res5,res2,res1

  15. #15
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    je crois j'avais pas compris bien l'énoncé :
    donc cette amélioration en ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def rendre_monnaie(prix, x20, x10, x5, x2, x1 ):
        liste_valeur_billet = (20, 10, 5, 2, 1)
        somme = x20*20+x10*10+x5*5+x2*2+x1*1
        if somme <prix:
            res20 = None
            res10 = None
            res5 = None
            res2 = None
            res1 = None
        else:
            res20 = prix // x20
            res10 = (prix % x20) // x10
            res5 = (prix % x10) // x5
            res2 =(prix % x5) // x2
            res1 = (prix % x2) // x1
        return res20,res10,res5,res2,res1
    donne cette résultat:
    Nom : resultat.PNG
Affichages : 9493
Taille : 26,0 Ko

  16. #16
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 603
    Par défaut
    C'est déjà mieux, j'en propose une, que je ne peux tester sur ton système

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    def rendre_monnaie(prix, x20, x10, x5, x2, x1): 
        """
        Args:
            prix (int): somme à déterminer selon la monnaie dispo
            x20 (int): n billets de 20
            x10 (int): n billets de 10
            ...
        
        Returns:
            list of numbers of billets of 20, 10, 5, 2 and 1 in this order
        """
        billets = [
            (x20, 20),
            (x10, 10),
            (x5, 5),
            (x2, 2),
            (x1, 1)
        ]
        somme = prix
        total = sum([x*y for x, y in billets])
        if total < prix:
            return None
        resultat = []
        total = 0
        for n, valeur in billets:
            count = 0
            while prix // valeur >= 1 and n and prix:
                count += 1
                total += valeur
                prix = somme - total
                n -= 1
            resultat.append(count)
        return resultat
     
     
    print(rendre_monnaie(85, 3, 1, 1, 5, 5)) # [3, 1, 1, 5, 0]
     
     
    # 3 billets de 20,
    # 1 billet de 10,
    # 1 billet de 5,
    # 5 pièces de 2
    # aucune pièce de 1

  17. #17
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    il faut nous dire à quelle ligne correspond l'exception, ici il n'y a pas de ligne 25.

  18. #18
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 603
    Par défaut
    Citation Envoyé par FATENMRABET Voir le message
    en fait j'ai une seule problème maintenant" Votre programme a été interrompu par une exception:
    Ligne 25: ZeroDivisionError: integer division or modulo by zero", lorsque j'ajoute un while le programme ne donne rien
    Tu parles de quel code ? Et aussi donne le message d'erreur entier !

  19. #19
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    En n'utilisant que les fonctions de base de Python, voilà comment j'écrirais la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    def rendre_monnaie(prix, x20=20, x10=10, x5=5, x2=2, x1=1):
     
        res20 = prix//x20
        prix = prix - res20*x20
     
        res10 = prix//x10
        prix = prix - res10*x10
     
        res5 = prix//x5
        prix = prix - res5*x5
     
        res2 = prix//x2
        prix = prix - res2*x2
     
        res1 = prix//x1
        prix = prix - res1*x1
     
        return res20, res10, res5, res2, res1

  20. #20
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut resultat
    salut à tous,
    en fait voilà la résultat valide, il faut lire très bien l'énoncé, vos remarques ont aidés certainement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    def rendre_monnaie(prix, x20, x10, x5, x2, x1):
        liste_valeur_billet = (20, 10, 5, 2, 1)
        n = len(liste_valeur_billet)
        somme = x20 * 20 + x10 * 10 + x5 * 5 + x2 * 2 + x1 * 1
        reste = somme - prix
        if somme <= prix:
            res20 = None
            res10 = None
            res5 = None
            res2 = None
            res1 = None
        else:
            res20 = reste // 20
            reste -= res20 * 20
            res10 = reste // 10
            reste -= res10 * 10
            res5 = reste // 5
            reste -= res5 * 5
            res2 = reste // 2
            reste -= res2 * 2
            res1 = reste // 1
        return res20, res10, res5, res2, res1

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Rendre le plus de monnaie avec des pièces en nombre limité
    Par arttom dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 19/02/2017, 22h40
  2. [XL-2007] calcul de caisse avec le nombre de pièce et billet à retirer
    Par math5821 dans le forum Excel
    Réponses: 5
    Dernier message: 17/07/2009, 18h49
  3. SMTP : Problème avec l'envoi de pièces jointes
    Par Sunsawe dans le forum Développement
    Réponses: 2
    Dernier message: 13/04/2007, 01h05
  4. Centrer un contenu avec hauteur minimum
    Par steph6499 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 09/04/2007, 16h05
  5. problème avec l'envoi de pièces jointes
    Par mouna201 dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 11/01/2006, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo