Problème de boucle

Fermé
Utilisateur anonyme - Modifié le 4 mai 2020 à 17:20
 Utilisateur anonyme - 12 mai 2020 à 23:04
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

Furansujean Messages postés 58 Date d'inscription lundi 1 juillet 2019 Statut Membre Dernière intervention 12 septembre 2022 5
4 mai 2020 à 20:50
Bonjour jahawai,

peux-tu nous donner un exemple de cas qui ne fonctionne pas comme tu l'attendais ?
0
Utilisateur anonyme
4 mai 2020 à 23:49
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
Furansujean Messages postés 58 Date d'inscription lundi 1 juillet 2019 Statut Membre Dernière intervention 12 septembre 2022 5
5 mai 2020 à 19:52
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
Furansujean Messages postés 58 Date d'inscription lundi 1 juillet 2019 Statut Membre Dernière intervention 12 septembre 2022 5
9 mai 2020 à 01:14
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
11 mai 2020 à 08:42
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
Furansujean Messages postés 58 Date d'inscription lundi 1 juillet 2019 Statut Membre Dernière intervention 12 septembre 2022 5
11 mai 2020 à 16:54
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
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
Utilisateur anonyme
11 mai 2020 à 18:17
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
Furansujean Messages postés 58 Date d'inscription lundi 1 juillet 2019 Statut Membre Dernière intervention 12 septembre 2022 5 > Utilisateur anonyme
12 mai 2020 à 21:32
Bonjour jahawai,

Tu es toujours bloqué ? ou tu as trouvé la solution ?
0
Utilisateur anonyme
12 mai 2020 à 23:04
Bonsoir,

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

Merci quand même !
0