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 :

Variable non pris en compte dans une boucle FOR [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2021
    Messages : 3
    Par défaut Variable non pris en compte dans une boucle FOR
    Bonjour a tous.

    J'ai quelque souci dans un programme.

    Dans lexemple ci dessous dans ma deuxieme boucle FOR ma variable day n'est pas prise en compte
    le print dans la premiere boucle me renvoie bien les valeurs attendue
    mais dans la deuxieme il ne me sort que la premiere valeur de ma list.
    en gros la deuxieme boucle ne fonctionne qu'avec la premiere valeur et elle ne recommence pas lorsque la valeur de day change.
    Ca fait plusieur jours que je cherche et j'en ai aussi parler a des amis développeur mais qui n'on pas de grosse connaisance en python.

    Merci d'avance pour votre aide

    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
     
    import csv
    import re
     
    # ouverture du CSV et creation du lecteur
    fileCSV = open("testmail2.CSV")
    myReader = csv.reader(fileCSV)
     
    weekDays = ["lun", "mar", "mer", "jeu", "ven", "sam", "dim"]
     
    #fonction de recherche de mot clé dans les lignes CSV
    def recherche(occurence,jour, valeur_OK=""):
        global obj
        global obj2
        global obj3
        motif = re.compile(occurence)
        obj = motif.search(row[0])
        motif2 = re.compile(valeur_OK)
        obj2 = motif2.search(row[0])
        motif3 = re.compile(jour)
        obj3 = motif3.search(row[0])
     
     
    for day in weekDays:
        NbparJ = 0
        print (day)
        for row in myReader:
            recherche("GPPF BH", day , "succès")
            if obj and obj2 and obj3:
                print(row)
                NbparJ = NbparJ + 1
                print(NbparJ)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    La boucle "for row in myReader:" se termine lorsque tout le fichier a été lu.
    Et si tout le fichier a été lu, il n'y a plus rien a lire à l'itération suivante.

    Soit vous recommencez la lecture du fichier, soit vous stockez le contenu du fichier dans une liste, soit vous changer la logique du code. Par exemple en extrayant le jours des colonnes 0 qui matchent les critères et en vérifiant que c'est un jour de la semaine.

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2021
    Messages : 3
    Par défaut
    Merci pour ta réponse.

    J'ai corrigé mon code et cela fonctionne a merveille.

    bonne journée.

    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
     
    import csv
    import re
     
    weekDays = ["lun", "mar", "mer", "jeu", "ven", "sam", "dim"]
     
    #fonction de recherche de mot clé dans les lignes CSV
    def recherche(occurence,jour, valeur_OK=""):
        global obj
        global obj2
        global obj3
        motif = re.compile(occurence)
        obj = motif.search(str(i))
        motif2 = re.compile(valeur_OK)
        obj2 = motif2.search(str(i))
        motif3 = re.compile(jour)
        obj3 = motif3.search(str(i))
     
    # ouverture du CSV et creation du lecteur
    fileCSV = open("testmail2.CSV")
    myReader = csv.reader(fileCSV)
     
    Maillist = []
    for row in myReader:
        Maillist.append(row)
     
     
    for day in weekDays:
        NbparJ = 0
        print (day)
        for i in Maillist:
            recherche("GPPF BH", day , "succès")
            if obj and obj2 and obj3:
                print(i)
                NbparJ = NbparJ + 1
                print(NbparJ)

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Warlug Voir le message
    J'ai corrigé mon code et cela fonctionne a merveille
    Je ne sais pas à quoi ressemble votre chaine de caractère mais on devrait pouvoir filtrer les lignes qui contiennent "GPPF BH" et day et "succès" avec une seule expression régulière.

    Ce qui permettrait de ne parcourir les enregistrements qu'une seule fois.

    Après côté "programmation", c'est un peu limite d'avoir une fonction recherche qui échange autant de variables globales. Pourquoi ne pas l'appeler avec row[0] en paramètre et lui faire retourner un booléen?

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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2021
    Messages : 3
    Par défaut
    Il faut que je peaufine tout ça, mais pour la fonction recherche je n'en suis qu'au début. Les arguments qui sont fixes pour le moment seront des variables plus tard.
    J'apprends sur le tas en tâtonnant beaucoup (je ne suis pas développeur) nul doute que le code final ne ressemblera plus vraiment a ça qui n'est que le "brouillon"

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

Discussions similaires

  1. Valeur non prise en compte dans une boucle
    Par eleydet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/07/2016, 10h01
  2. Réponses: 4
    Dernier message: 20/12/2011, 12h00
  3. Réponses: 0
    Dernier message: 02/11/2011, 15h41
  4. exception non levée malgré throw dans une boucle for
    Par marion5515 dans le forum Langage
    Réponses: 12
    Dernier message: 14/05/2009, 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