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 :

imbrication boucle for [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraite
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Points : 12
    Points
    12
    Par défaut imbrication boucle for
    bonjour a tous!
    je suis nouveau sur le forum et dans la programmation en python.
    j ecris un script qui me totalise et calcul les sommes gagnees au loto par des joueurs.
    j ai deux fichiers :
    un fichier "joueurs" et un autre des sommes "gagnees" par ces memes joueurs.
    je vous mets le script:

    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
    #****************************************************************
    #               recherche et calcul des gains                   *
    #****************************************************************
    import os ,csv
    from modif_jour import* # calcul le jour du tirage 
    somme = float()
    chemin = os.getcwd()+"/donnees/" # chemin du repertoire des donnees
    lecture_jeu = csv.reader(open(chemin+"flash.txt","r")) 
    lecture_gain = csv.reader(open(chemin+"jeu_gain.txt","r"))
    dico = dict()
    #*****************************************************************
     
    somme = 0
    for row in lecture_jeu:
        nom_jeu = row[0]
        for chaine in lecture_gain:
            nom_gain = chaine[0]
            if nom_jeu == nom_gain:
                gain = chaine[2]
                somme = somme + float(chaine[2])
                dico ={nom_jeu:somme}
                print(" {} a gagne la somme de : {} € le :{} {}"
                      .format( nom_gain,gain,modif_jour(chaine[1]),chaine[1]))
    for nom in dico:
        gain = dico[nom]
        print(" le joueur :",nom," a gagne la somme totale de :",gain,"€")
    #*************** fin ****************************************************
    mon souci est que
    1 la premiere boucle fonctionne avec le nom du joueur 1 fois
    2 la seconde boucle fonctionne tant que nom_jeu correspond a nom_gain #
    tout se poursuit probleme
    le probleme arrive lors de l execution une seconde fois de la premiere boucle
    celle ci s arrete a la seconde boucle sans execution de celle-ci.

    le fichier "flash.txt" comporte les 5 noms de joueurs et les numeros joues
    le fichier "jeu_gain.txt" comporte le nom joueur,la date du jeu,la somme gagne et le paiement o/n
    je vous met le resultat affiche dans l interpreteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #*************************************************
    Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:16:59) [MSC v.1900 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> 
    = RESTART: lecturegains.py =
     nom_1 a gagne la somme de : 1.0 € le :samedi 01/01/2011
     nom_1 a gagne la somme de : 6.0 € le :samedi 02/02/2013
     le joueur : nom_1  a gagne la somme totale de : 7.0 €
     
    >>>pas d affichage des 4 autres joueurs
    ***********************************************************
    je vous joint en piece les deux fichiers
    j espere ne pas avoir ete trop long dans mon explication, je vous remercie d avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Lorsque tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                dico ={nom_jeu:somme}
    tu recrées à chaque fois une nouvelle référence à un dictionnaire. Seul le dernier {nom: somme} subsiste à la fin de la boucle.

    Tu dois aussi remettre la somme à zéro pour chaque nouveau joueur sinon ils vont cumuler leurs gains ensemble.

  3. #3
    Membre à l'essai
    Homme Profil pro
    retraite
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    bonjour et merci a vincent pour ces remarques,
    le probleme n est pas du au dico par lui meme mais je vais faire la modif proposee.
    si je decortique le script cela donne :

    1 - la premiere boucle "for" s execute avec le premier nom_jeu
    2 - recuperation de la variable nom_jeu
    3 - execution de la seconde boucle "for" pas de probleme
    4 - comparaison des variables nom_jeu par rapport a nom_gain
    5 - condition = true
    6 -alimentation du dico
    7 - affichage du resultat
    8 - retour execution du second "for" avec le nom suivant et ainsi de suite
    jusqu a la fin de lecture du fichier "lecture_gain"
    9 - seconde execution de la premiere boucle "for" lecture_gain
    et la le probleme apparait par l execution de la premiere boucle sans execution de la seconde boucle
    et ce jusqu a la fin du fichier lecture_jeu.
    je pense avoir ete assez clair dans ma demarche.
    voila je cherche par tout les moyens mis a ma dispo livre de gerard swinnen "apprendre a programmer en python 3" et
    "apprendre a programmer en python" de vincent le goff
    merci pour votre aide!

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Tu t'embrouille, c'est plus simple.

    Essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dico = {}
    for row in lecture_jeu:
        for chaine in lecture_gain:
            if not row[0] in dico:
                dico[row[0]] = 0
     
            dico[row[0]] += float(chaine[2])
     
    for item in dico:
        print(" le joueur : %s a gagné la somme totale de : %s" %(item, dico[item]))
    Edit: j'ai retiré la ligne de comparaison don je ne vois pas l'utilité

  5. #5
    Membre à l'essai
    Homme Profil pro
    retraite
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    ok je vais essayer ce code merci!
    un certain laps de temps plus tard.......
    c est vrai la ligne de compar n est pas utile encore une chose de retenue...
    j ai essaye ton code mais le resultat ne me convient toujours pas ce n est pas ce que je recherche mais merci de ton aide, je cherche toujours et comme je suis obstine je trouverais!!!

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

Discussions similaires

  1. VBA-Problème d'imbrication de boucles For (?)
    Par Lyiam35 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 31/05/2016, 14h53
  2. Imbrication conditions if + boucles for
    Par Olivier59260 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/05/2016, 21h17
  3. Réponses: 2
    Dernier message: 16/07/2015, 17h41
  4. imbrication boucle FOR
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/03/2011, 19h51
  5. Imbrication de boucles For
    Par dominos dans le forum Débuter
    Réponses: 4
    Dernier message: 03/04/2010, 17h53

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