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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 062
    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 062
    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 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    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 062
    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 062
    Par défaut
    Une boucle et une soustraction peuvent suffirent

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    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 062
    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 062
    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 746
    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 746
    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 !!!

+ Répondre à la discussion
Cette discussion est résolue.

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, 21h40
  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, 17h49
  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, 00h05
  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, 15h05
  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, 13h20

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