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 :

boucles imbriquees en python


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut boucles imbriquees en python
    bonjour

    j'ai un petit problème de passage d'increment

    j'ai les boucles imbriquees suivantes


    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
    inc=0
    l40=0
    for i in val_TT_base:       
         T=[]
         print i
         print inc
         while l40 <= len(v1) -1:
               if v1[l40][1]==inc:
                    T.append(v1[l40][0])
                     minT= min(T)
                     maxT= max(T)
                     vvmin.append(minT)
                     vvmax.append(maxT)
                l40+=1
          inc+=1
    pourquoi inc vaut il toujours zero dans la boucle while
    alors que le print inc donne 0 1 2 3 4
    la boucle for s'execute 5 fois
    val_TT_base = [51.56, 67.55, 92.63, 101.44]
    v1 = [(67.2, 0), (69.1, 0), (68.34, 0), (69.17, 0), (85.0, 1), ......
    a chaque passage de la boucle for je devrai incrementer de 1 dans la boucle while ??

  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
    inc vaut peut-être toujours zero parce que ton imbrication de code n'est pas exacte au niveau des indentations.

    Edite ton code en utilisant les balises codes (icône #) que l'on puisse comprendre.

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut Indentation !
    Bonjour pat100,

    Comme le suppose VinS, tu as bien un gros problème d'indentation à plusieurs niveaux dans ton code.

    Python a besoin des indentations pour s'y retrouver. Et cela te permet aussi de t'y retrouver dans les boucles de code. Pour indenter, il vaut mieux utiliser la touche Tab. Cette indentation a une largeur de 4 caractères or, chez toi, il y a 5 caractères d'espacement.

    Voilà une petite correction qui semble fonctionner.

    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
     
    inc=0
    l40=0
    val_TT_base = [51.56, 67.55, 92.63, 101.44]
    v1 = []
     
    for i in val_TT_base:       
        T=[]
        print i
        print inc
        while l40 <= len(v1) -1:
            if v1[l40][1]==inc:
                T.append(v1[l40][0])
                minT= min(T)        #Attention a ces noms qui pretent a confusion
                maxT= max(T)      #Attention a ces noms qui pretent a confusion
                vvmin.append(minT)
                vvmax.append(maxT)
                l40=l40 + 1        #Ou bien l40+=1 mais ... je n'aime pas trop cette syntaxe à la C.
        inc=inc+1        #Ou bien inc+=1
    Ta manière de nommer tes variables n'est pas la meilleure qui soit. Appeler une variable du nom d'une fonction ... c'est la porte ouverte à l'incompréhension lors de la relecture du code dans quelques jours.
    Tu devrais t'inspirer de ce qui se fait en général. Il y a suffisamment de code sur le web pour apprendre à nommer correctement ou, du moins, de manière plus explicite.

    A+

    Oufti ! J'ai trouvé l'erreur

  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
    Je n'avais pas vu que tu avais édité ton post.

    Tes indentations lèvent des erreurs, c'est peut-être simplement la copie.

    Quoiqu'il en soit, en reprenant ton code comme ceci:
    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
     
    # -*- coding: utf8 -*-
     
    val_TT_base = [51.56, 67.55, 92.63, 101.44]
    v1 = [(67.2, 0), (69.1, 0), (68.34, 0), (69.17, 0), (85.0, 1)]
    inc=0
    l40=0
    vvmin = []
    vvmax = []
    for i in val_TT_base:       
        T=[]
        print "i: %s  inc: %s" %(i, inc)
        while l40 <= len(v1) -1:
            print "l40: %s  inc: %s" %(l40, inc)
            if v1[l40][1] == inc:
                T.append(v1[l40][0])
                minT= min(T)
                maxT= max(T)
                vvmin.append(minT)
                vvmax.append(maxT)
            l40+=1
        inc+=1
     
    print "vvmin: %s" % vvmin
    print "vvmax: %s" % vvmax
    J'obtiens ceci:
    i: 51.56 inc: 0
    l40: 0 inc: 0
    l40: 1 inc: 0
    l40: 2 inc: 0
    l40: 3 inc: 0
    l40: 4 inc: 0
    i: 67.55 inc: 1
    i: 92.63 inc: 2
    i: 101.44 inc: 3
    vvmin: [67.200000000000003, 67.200000000000003, 67.200000000000003, 67.200000000000003]
    vvmax: [67.200000000000003, 69.099999999999994, 69.099999999999994, 69.170000000000002]
    la boucle while ne se reproduit pas une deuxième fois parce que la condition l40 <= len(v1) -1 n'est plus vraie dans mon exemple, là c'est à toi de voir avec tes données ou à remettre l40 à zero.

  5. #5
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Citation Envoyé par Papy Octet Voir le message
    Pour indenter, il vaut mieux utiliser la touche Tab. Cette indentation a une largeur de 4 caractères or, chez toi, il y a 5 caractères d'espacement.
    Ce n'est malheureusement pas aussi simple. Les éditeurs actuels sont totalement configurables, on peut mettre ce que l'on veut derrière la touche Tab, des tabulations ou des espaces. En plus, selon l'église pour laquelle ils prêchent, ils mettent leur config par défaut préférée dedans, tabulation ou espaces. Et comme si ce n'était pas assez compliqué, on peut configurer l'aspect des tabulations, c'est à dire qu'on peut dire que chaque fois qu'on en rencontre une, on peut choisir d'aligner la colone sur des multiples de 4, 5, ou 8 ou 137... Moralité, on voit quelque chose chez l'un et quelque chose d'autre chez l'autre. Si en plus on a mélangé avec des espaces, le résultat est imprévisible. Tout ça ne serait pas arrivé avec des espaces...

    A+

    Pfeuh

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,
    Python 3 est plus strict là dessus: lorsque ce n'est pas cohérent (tab ou space), il plante.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut boucles imbriquees
    merci beaucoup de votre aide !!

    excusez ma reponse tardive..

Discussions similaires

  1. [XSLT] Noeud precedent et boucles imbriquees
    Par crevygood dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/05/2008, 16h29
  2. [Debutante] [XSLT] Pb boucles imbriquées
    Par rainlily dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 20/08/2007, 12h31
  3. [Tableaux] Boucles imbriquées
    Par setblue dans le forum Langage
    Réponses: 8
    Dernier message: 17/08/2007, 13h28
  4. Une Boucle imbriquée dans un curseur
    Par freestyler1982 dans le forum SQL
    Réponses: 1
    Dernier message: 09/08/2007, 22h23
  5. Réponses: 18
    Dernier message: 08/11/2005, 08h38

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