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 :

Problème Boucles imbriquées


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Problème Boucles imbriquées
    Bonjour, j'ai un problème avec un code et je suis perdu je ne sais pas dans quelle direction cherché. Voici mon problème:


    En entrée j'ai une string que j'appelle DS sous cette forme: d92211086-008 ou sans le tiret d92211086008:

    Je veux compiler dans un fichier de sortie toutes les lignes d'un énorme fichier "etat" qui contienne la DS avec et sans tiret si elles existent.

    Il faut donc que je boucle une fois ma recherche avec la DS initiale, que je récupère la ligne ensuite je rajoute ou enlève le tiret et refait une boucle de recherche. J'ai donc écrit ce début de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for ligne in etat:
                    if DS in ligne:
                        if DS.__contains__ ("-"):
                            x = DS.replace ("-", "")
                            if x in ligne:
                                print DS+" NOK"
    Cela fonctionne uniquement si j'enlève le bloc if x in ligne
    J'ai l'impression qu'il test sur la même ligne du fichier état dans la boucle if x in ligne: au lieu de recherché dans tout le fichier ETAT.


    Je suis perdue où est l'erreur?

    Merci beaucoup pour l'aide.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    J'ai trouvé parfois il suffit d'écrire le problème est la solution nous saute au yeux....

    voici l'erreur

    code initial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for ligne in etat:
                    if DS in ligne:
                        if DS.__contains__ ("-"):
                            x = DS.replace ("-", "")
                            if x in ligne:
                                print DS+" NOK"
    code correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                for ligne in etat:
                    if DS in ligne:
                        if DS.__contains__ ("-"):
                            x = DS.replace ("-", "")
                            for ligne in etat:
                                if x in ligne:
                                    print x+"ok"
    Il faut rajouter un for ligne in etat...

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par knibalpj Voir le message
    J'ai trouvé parfois il suffit d'écrire le problème est la solution nous saute au yeux....
    DS ne change pas d'une itération à l'autre: les "in" et "replace" n'ont rien à faire "dans" la boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = DS.replace ("-", "")
    après pour tester si "DS" ou "x" sont dans ligne, il faut apprendre à utiliser les expressions conditionnelles: "if DS in ligne or x in ligne:"

    Et si ces constructions simples (qui permettent en fait de traduire facilement ce que vous voulez coder) ne sont pas encore intuitives, il faut prendre le temps de réviser ces notions dans un tuto.

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

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup Wiz effectivement c'est plus clair avec les OR


    J'ai un autre problème:

    Voici un exemple de ligne de mon fichier etat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    d92414529000:2
    d92414529000:1
    d11015133-000.default:2
    Première colonne est ma DS et je souhaite lire ce fichier en readlines() afin de faire mes boucle dessus mais en ignorant les doublons ou les DS qui dépasse les 15 caractères.

    en Gros sur l'exemple du dessus je ne veux lire que la 1er ligne.


    Je ne sais pas comment faire sans passer par la création de fichier intermédiaire et faire un code a rallonge.

    Est il possible de rajouter des conditions d'exclusion des doublons et longueur de l'item[0] DS?

    Merci pour votre aide

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par knibalpj Voir le message
    en Gros sur l'exemple du dessus je ne veux lire que la 1er ligne.
    Autant dire qu'après avoir trouvé la première occurrence de DS dans le fichier, vous ignorez le reste.
    Comparez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> ds = 'a'
    >>> for line in list('xxaaazzz'):
    ...     if ds in line:
    ...        print(line)
    ...
    a
    a
    a
    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> for line in list('xxaaazzz'):
    ...     if ds in line:
    ...        print(line)
    ...        break
    ...
    a
    >>>
    Ce sont des instructions simples qui font exactement la même chose: afficher toutes les occurrences, ou s'arrêter après avoir trouvé la première. "for" accepte même un "else" qui permet d'écrire qu'on n'a pas trouvé "ds" dans ce cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> ds = 'b'
    >>> for line in  list('xxaaazzz'):
    ...     if ds in line:
    ...        print(line)
    ...        break
    ... else:
    ...     print (ds, 'non trouvé')
    ...
    b non trouvé
    >>>
    C'est pas compliqué... mais il faut prendre le temps d'apprendre avec un tuto.

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

Discussions similaires

  1. Problème boucle imbriquée SqlDataReader
    Par xouzi dans le forum C#
    Réponses: 23
    Dernier message: 13/01/2011, 15h48
  2. Problème boucle while imbriquée dans autre boucle while
    Par nattydreadnatty dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2010, 14h58
  3. [XSLT] problème de boucle imbriquée en xsl/xpath
    Par lol88 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2009, 18h30
  4. problème de syntaxe dans des boucles imbriquées
    Par deglingo37 dans le forum Access
    Réponses: 2
    Dernier message: 01/09/2006, 14h46
  5. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26

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