Problème de boucle

Bonjour à tous,

J'ai un problème avec un morceau de code en Python qui ne fonctionne pas.

Voici le code :
        Error = False
        for i in range(0,len(liste)):
            if (self.ui.label1.toPlainText() == liste[i][0][0] and
                self.ui.label2.toPlainText() == liste[i][0][1] and
                self.ui.label3.toPlainText() == liste[i][0][2] and
                self.ui.label4.toPlainText() == liste[i][0][3]):
                Error = True
                break


La liste est du type : [[[a,b,c,d],[a,b,c,e]],[[a2,b2,c2,d2],[a2,b2,c2,e2]],[[a,b,c,d2],[a2,b2,c,e]]]
etc.

Je veux que la variable Error soit vraie si les valeurs de mes 4 labels sont égales en même temps à des valeurs précises de ma liste.

Cela fonctionne parfois, et parfois non, sans que je m'explique pourquoi (je ne vois aucune raison apparente et c'est aléatoire). Quand je renvoie les différents éléments avec print, ils sont bien égaux, et pourtant, Error reste False...

Quelqu'un aurait-il une idée pour m'aider (si je suis assez clair) ?

Merci d'avance...

8 réponses

  1. Bonjour jahawai,

    peux-tu nous donner un exemple de cas qui ne fonctionne pas comme tu l'attendais ?
    0
    1. Bonjour,

      Merci pour cette première réponse.

      A vrai dire, pas vraiment. J'ai l'impression que c'est aléatoire, c'est-à-dire que différents cas ne fonctionnent pas et que ce ne sont pas toujours les mêmes. C'est un peu difficile à expliquer car cela fait partie d'un code plus dense...

      Pour résumer :
      - j'ai codé une interface qui appelle un fichier csv et l'ouvre
      - certaines infos du csv s'affichent dans des qobjects (tableaux, etc.) dont des labels
      - le csv se copie également sous forme d'une liste

      Je veux vérifier si certaines lignes du csv comprennent conjointement les infos affichées dans les labels. Ce que je sais être vrai. Et quand c'est le cas, je veux que ma variable error deviennent vraie.

      Bizarrement, quand je lance mon application, je me retrouve avec des fois où cela fonctionne très bien, d'autres fois non.

      Je ne sais pas si c'est plus clair ?
      0
      1. Bonsoir,

        ça n'est pas facile sans déboguer. Je te suggère d'afficher des
        print
        :
        Error = False
                for i in range(0,len(liste)):
                    print("self.ui.label1.toPlainText() =",self.ui.label1.toPlainText())
                    print("self.ui.label2.toPlainText() =",self.ui.label2.toPlainText())
                    print("self.ui.label3.toPlainText() =",self.ui.label3.toPlainText())
                    print("self.ui.label4.toPlainText() =",self.ui.label4.toPlainText())
                    print("liste[i][0] =",liste[i][0])
        
                    if (self.ui.label1.toPlainText() == liste[i][0][0] and
                        self.ui.label2.toPlainText() == liste[i][0][1] and
                        self.ui.label3.toPlainText() == liste[i][0][2] and
                        self.ui.label4.toPlainText() == liste[i][0][3]):
                        Error = True
                        break
        0
        1. Bonsoir,

          as-tu résolu le problème de ton côté ? Si oui, je te propose de faire un commentaire en ce sens.

          Par ailleurs, si tu as des questions, n'hésite pas. :-)
          0
          1. Bonjour,

            Désolé, j'ai été pris par autre chose depuis.
            J'avais déjà tenté de faire des print et cela ne m'a pas aidé.

            En fait, le problème est que j'ai vraiment l'impression que cela fonctionne parfois et d'autres pas (je sais que ce n'est pas très logique et pourtant...).
            Pour compléter la description, les valeurs des labels sont modifiées par l'intermédiaire de valeurs choisies dans des combobox.
            Et il arrive que cela fonctionne dans un premier temps avec une valeur. Et plus tard, après avoir modifié deux ou trois fois la valeur de la combobox, ça plante.

            Merci encore en tous cas
            0
            1. Bonjour,

              cela me parait très difficile de repérer ce qui peut poser problème sans un code minimal qui permet de reproduire cette anomalie.
              Peux-tu poster ici une version minimale de ton code (ou la version complète de ton code si c'est faisable) ? Par minimale, j'entends : Tu gardes uniquement le code qui produit l'erreur, et quand on l'exécute on a cette anomalie, avec son comportement "aléatoire", comme tu l'indiques.

              Si poster le code n'est pas possible, essaie de passer en mode debug, et de faire un breakpoint avant ta condition if, ce sera probablement plus facile pour trouver l'erreur.
              0
              1. Je suppose que ton morceau de code n'est pas dans ton if. Je crois que rajouter deux espaces avant
                Error = True
                et
                 break
                pourrait résoudre ton problème.

                        Error = False
                        for i in range(0,len(liste)):
                            if (self.ui.label1.toPlainText() == liste[i][0][0] and
                                self.ui.label2.toPlainText() == liste[i][0][1] and
                                self.ui.label3.toPlainText() == liste[i][0][2] and
                                self.ui.label4.toPlainText() == liste[i][0][3]):
                                  Error = True
                                  break
                0
                1. Bonjour,

                  Error = True
                  et
                  break
                  sont bien dans le if dans mon code.
                  Le problème ne vient pas de là .
                  Au cas où je n'avais pas bien compris ta remarque, j'ai tenté les espaces, mais le résultat est le même.

                  Merci quand même...
                  0
                2. @Utilisateur anonymeBonjour jahawai,

                  Tu es toujours bloqué ? ou tu as trouvé la solution ?
                  0
              2. Bonsoir,

                Malheureusement non...
                Mais je laisse ça de côté pour le moment, pas de souci.

                Merci quand même !
                0