Bonjour,
Le premier idex d'une liste est [0]...
Version imprimable
Bonjour,
Le premier idex d'une liste est [0]...
Salut,
2 choses.
- Vous postez un code qui ne fonctionne pas car aux lignes 5 et 9, il y manque des ')'.
- Vous dites j'ai un problème avec lst[j].get mais cette instruction n'est pas dans le code que vous avez posté.
De plus, qui dit "problème" dit message d'erreur qui avec Python sont suffisamment bavards pour savoir quoi faire.
Si vous l'ignorez, c'est que vous ne savez pas qu'essayer de le comprendre était la première étape pour un diagnostic et un essai de correction.
Tout çà pour dire que demander de l'aide, c'est poster un code qui permette de reproduire le problème avec les informations qui vont avec: soit le message d'erreur soit une description du genre "je m'attendais à ce que lst[j].get retourne XXX mais çà retourne ZZZ".
Sûr qu'on ne va pas lire 3000 lignes de code: virer tout ce qui est sans rapport avec le "problème" (et permettre de le reproduire) est le premier boulot que vous devez faire.
Tout çà n'est pas pour vous embêter, juste que sans code, ni message d'erreur, pas facile de vous aider.
- W
PS: Sûr en lisant le peu de code que vous avez écrit, l'expérience dit que c'est probablement une conséquence de ce que vous avez écrit ligne 8...
désolé pour les erreurs de parenthèse sur le code mais je l'ai tapé trop rapidement rapidement
ensuite je récupère les variables pour les insérer dans une bbd avec par exemple :Code:
1
2
3
4
5
6
7
8
9
10 lst = [] for i in range(0, 50): lst.append(StringVar(value="var" + str(i + 1))) Entry(main, textvariable=lst[i]).grid(row=1, column=(i + 1)) lste = [] for j in range(0, 50): lste.append(IntVar(value="var" + str(j + 1))) Entry(main, textvariable=lste[j]).grid(row=2, column=(j + 1))
le code erreurCode:
1
2
3 lst[0].get lste[0].get
ça vient de la ligne 9 mais je ne vois pas comment corriger en conservant le IntVar car les données saisies ensuite dans la BDD sont intCode:
1
2
3
4
5
6 return self._tk.getint(value) _tkinter.TclError: expected integer but got "var1" return int(self._tk.getdouble(value)) _tkinter.TclError: expected floating-point number but got "var1"
Salut,
Au début quand j'écrivais n'importe quoi, j'étais toujours surpris que l'ordinateur se contente de m'injurier alors qu'il pourrait me donner des baffes. On peut toujours le louer pour sa grande patience, mais quand même des coups de pieds au culs de temps en temps ne seraient-ils pas plus motivants pour me forcer à réfléchir?
Si IntVar.get doit retourner un nombre pourquoi lui assigner une chaine de caractères comme valeur initiale. Chaine de caractères qui au demeurant ne contient pas que des "digits"...
tkinter a été écrit dans les années 90. A cette époque là, les programmeurs avaient appris à réfléchir avant de coder. Pas la peine que ceinture et bretelles vérifient pour eux que la valeur initiale d'un machin qui retournera un entier devait ressembler à un entier.
Bon d'accord, ils passaient aussi de longues heures à coder et parfois la fatigue aidant ils se retrouvaient avec un message d'erreur comme _tkinter.TclError: expected integer but got "var1" et savaient vite en trouver la cause: car il est rare d'écrire un programme "juste" dès le premier coup. Il y a des erreurs, on les analyse, on corrige, on re-teste,...
Rien de bien sorcier, juste ce qu'on apprend/découvre en essayant de faire les exercices que proposent les tutos.
- W
merci de prendre de temps de rédiger une réponse aussi longue. Néanmoins, il me semble qu'un peu moins de condescendance serait de bon aloi.
vous pourriez alors répondre simplement à la ou aux questions. Ce qui parait évident pour vous ne l'est peut pas pour autrui. Si je viens sur le forum c'est que mes nombreuses recherches sont restées infructueuses.
La question est toujours sans réponse : comment simplifier le code ci-dessous ?
merciCode:
1
2
3
4
5
6
7
8
9
10
11 var1 = IntVar var2 = IntVar var3 = IntVar var4 = IntVar var5 = IntVar var6 = IntVar ... .. .. var50 = IntVar
Je reprends le code que je vous ai montré ici et j eremplace les ... par IntVar
Et j'obtiens une liste de 50 IntVar... (ou d'autres choses).Code:
1
2
3
4 COUNT = 50 L= [] for _ in range(50): L.append(IntVar())
Ce qui permet de simplifier le code tout en accédant à chacune des IntVar via son index dans la liste L.
- W
merci pour la réponse
j'avais bien identifié le problème lié àmais l'utilisation d'une chaine associée à un nombre me permettait de mieux identifier les données d'autant plus que j'ai 4 x 50.Citation:
(value="var" + str(j + 1))
je peux me "repérer" aussi :
données 1 sera 0 à 49 soit 50 valeurs
données 2 sera 50 à 99
données 3 sera 100 à 149
données 4 sera 150 à 199
où alors, si je puis me permettre un autre question, est-il possible de faire quelque chose avec une boucle comme :
ça je n'ai pas encore réfléchi et ni cherché, ni testéCode:var + (i) = L[i].get
Non mais vous pouvez écrire:
Code:
1
2
3 V = [None,] * COUNT for i in range(COUNT): V[i] = L[i].get()
Pour l'instant vous êtes coincé parce que beaucoup de variables <=> boucles et collections.
Et si vous ne savez pas penser "boucles et collections", vous aurez des difficultés à reformuler vos problèmes avec ces structures de base du langage (ce qui est le b.a.ba).
- W
merci
je n'ai pas le reflexe "collections"