Compteur ou len() ?
Résolu
MickaToast
Messages postés
142
Date d'inscription
Statut
Membre
Dernière intervention
-
MickaToast Messages postés 142 Date d'inscription Statut Membre Dernière intervention -
MickaToast Messages postés 142 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je me pose une question, qu'est-ce qui est le mieux à faire niveau syntaxe/logique/code sur ce type de ligne:
La version compteur:
La version len():
Du coup, c'est quelle version la meilleur?
Merci !
Je me pose une question, qu'est-ce qui est le mieux à faire niveau syntaxe/logique/code sur ce type de ligne:
La version compteur:
while curseur_case < 81: if entree[curseur_case].get() != "": grille.append(int(entree[curseur_case].get())) else: grille.append(None) curseur_case += 1
La version len():
while len(grille) < 81: if entree[len(grille)].get() != "": grille.append(int(entree[len(grille)].get())) else: grille.append(None)
Du coup, c'est quelle version la meilleur?
Merci !
A voir également:
- Compteur ou len() ?
- Compteur électrique - Guide
- Compteur contractions - Télécharger - Santé & Bien-être
- Comment ralentir un compteur linky forum - Accueil - Objets connectés
- Excel len en francais - Guide
- Compteur point fléchette excel - Télécharger - Sport
15 réponses
Bonjour,
Je ne connais pas spécifiquement le Python, mais de manière générale, le premier est meilleur. à condition d'être sûr que "append" rajoute bien un élément à chaque fois, si "append" venait à parfois ne pas rajouter d'éléments (doublons par exemple), alors il faudrait utiliser "len" pour savoir réellement où on en est.
Attention quand même au nombre de calculs nécessaires pour obtenir le résultat de "len". Soit la taille est directement stockée indépendamment des données et il n'y a aucun problème à utiliser "len" à tour de bras, soit la taille doit être calculée à chaque appel de "len" et dans ce cas les performances du deuxième codes vont être largement dégradées.
Je ne connais pas spécifiquement le Python, mais de manière générale, le premier est meilleur. à condition d'être sûr que "append" rajoute bien un élément à chaque fois, si "append" venait à parfois ne pas rajouter d'éléments (doublons par exemple), alors il faudrait utiliser "len" pour savoir réellement où on en est.
Attention quand même au nombre de calculs nécessaires pour obtenir le résultat de "len". Soit la taille est directement stockée indépendamment des données et il n'y a aucun problème à utiliser "len" à tour de bras, soit la taille doit être calculée à chaque appel de "len" et dans ce cas les performances du deuxième codes vont être largement dégradées.
Je pense en fait que ni un ni l'autre n'est correct, clairement l'utilisation de la boucle for est bien plus adaptée...
C'est bien plus simple d'écrire
que de jouer avec les index comme c'est fait ci-dessus...
C'est bien plus simple d'écrire
for entree in grille: # code
que de jouer avec les index comme c'est fait ci-dessus...
Pas faux fred1599, je suis juste un habitué des boucles while et je n'ai pas vraiment l'habitude de faire des boucles for.
Pourrait tu me faire un exemple d'utilisation de boucle for dans mon cas de code stp? Car je ne vois pas vraiment comment faire
Pourrait tu me faire un exemple d'utilisation de boucle for dans mon cas de code stp? Car je ne vois pas vraiment comment faire
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Difficile de savoir avec si peu de code, mais je dirais que tu travailles avec Tkinter, je me trompe ?
Faudrait avoir l'initialisation de la variable entree (dictionnaire, liste, ...)
Dans ton cas de figure, j'ai l'impression que tu as plusieurs widgets Entry dont tu essaies de récupérer la valeur de chacun, c' est ça ?
Faudrait avoir l'initialisation de la variable entree (dictionnaire, liste, ...)
Dans ton cas de figure, j'ai l'impression que tu as plusieurs widgets Entry dont tu essaies de récupérer la valeur de chacun, c' est ça ?
Exactement, entree est une liste qui comporte 81 valeurs. Les valeurs sont comme ça:
Le script du dessus est répété 81 fois
En gros, le code qui est tout en haut de ce sujet consiste à récupérer 1 par 1 la valeur mise dans le widget Entry correspondant. J'ajoute la valeur du widget Entry si il n'est pas vide dans la liste grille, sinon j'ajoute "None" dans la liste grille.
entree.append(Entry(canvas, width=3, textvariable=grille_var[curseur_ajout])) #Ajout d'une case de saisi dans la liste "entree"
Le script du dessus est répété 81 fois
En gros, le code qui est tout en haut de ce sujet consiste à récupérer 1 par 1 la valeur mise dans le widget Entry correspondant. J'ajoute la valeur du widget Entry si il n'est pas vide dans la liste grille, sinon j'ajoute "None" dans la liste grille.
Il existe des méthodes toutes faîtes pour faire ce genre de choses, mais j'avoue qu'elles ne sont pas intuitives et réservées à des utilisateurs expérimentés.
Dans ton cas, car je n'ai pas beaucoup d'éléments
Explication:
root est le nom de la variable donnée par la fenêtre principale, c'est une instance Tk
Sans doute nommée autrement dans ton code...
winfo_children() est une méthode permettant de récupérer tous les widgets contenus dans root
winfo_class() est une méthode me donnant le nom de la classe du widget, ce qui nous intéresse se sont les widgets Entry
Si il se trouve une valeur dans ton Entry, alors on ajoute cette valeur dans grille, sinon on ajoute None
Code non testé, tu t'en doutes bien ;)
EDIT: Je considère que tu travailles en python 3.x
Dans ton cas, car je n'ai pas beaucoup d'éléments
for widget in root.winfo_children(): if widget.winfo_class() == 'Entry': res = widget.get() if res: grille.append(res) else: grille.append(None)
Explication:
root est le nom de la variable donnée par la fenêtre principale, c'est une instance Tk
root = Tk()
Sans doute nommée autrement dans ton code...
winfo_children() est une méthode permettant de récupérer tous les widgets contenus dans root
winfo_class() est une méthode me donnant le nom de la classe du widget, ce qui nous intéresse se sont les widgets Entry
Si il se trouve une valeur dans ton Entry, alors on ajoute cette valeur dans grille, sinon on ajoute None
Code non testé, tu t'en doutes bien ;)
EDIT: Je considère que tu travailles en python 3.x
Je l'ai modifié comme ceci:
Juste le nom "canvas" ainsi que int() on été rajouté.
for widget in canvas.winfo_children(): if widget.winfo_class() == "Entry": res = widget.get() if res: grille.append(int(res)) else: grille.append(None)
Juste le nom "canvas" ainsi que int() on été rajouté.
J'ai préféré faire dans la facilité et donc placer là où je voulais mes Entry. De plus, si je dois arranger mon interface d'une autre façon, j'aurais juste à déplacer le canvas et non pas toutes les Entry !
En effet ça permet d'éviter de placer souvent trop symétriquement les widgets d'une fenêtre... Par contre c'est pas plus simple, gestion plus difficile, mais peut-être plus esthétique.
Moi je trouve que ce n'est pas plus difficile, il faut juste faire .place() avec les coordonnées x/y après avoir fait un .pack(), pas trop de difficulté à faire ça ;-)
En gros, voilà mon code pour placer les Entry:
(Oui je sais, la code à partir de "if curseur_ajout%9 == 0:" n'est pas du tout optimisé!)
Mais en tout cas, ça me donne quelque chose de très jolie:
En gros, voilà mon code pour placer les Entry:
fenetre = Tk() #Master canvas = Canvas(fenetre, width=225, height=250) #Canvas canvas.pack() global grille_var curseur_ajout, entree, x, y, grille_var = 0, [], 0, 0, [] while curseur_ajout < 81: #Ajout cases grille_var.append(StringVar()) entree.append(Entry(canvas, width=3, textvariable=grille_var[curseur_ajout])) #Ajout d'une case de saisi dans la liste "entree" if curseur_ajout%9 == 0: x = 0 if curseur_ajout%27 == 0: y += 25 #Saut de ligne +5 else: y += 20 #Saut de ligne normal elif curseur_ajout%3 == 0: x += 5 #Saut de ligne verticale x += 20 #Deplacement de case vers la droite entree[curseur_ajout].pack() entree[curseur_ajout].place(x=x, y=y) #Placement de la case de saisi curseur_ajout += 1
(Oui je sais, la code à partir de "if curseur_ajout%9 == 0:" n'est pas du tout optimisé!)
Mais en tout cas, ça me donne quelque chose de très jolie:
