PyCharm a probablement vu que tu assignais une valeur à str2 (str2 = ...) dans ta fonction.Envoyé par Marcopolo
S'il existait déjà une variable str2 en dehors (globale), PyCharm a pu croire que tu voulais modifier celle-là. Il t'a donc suggéré global str2 pour indiquer clairement cette intention à Python.
Même si PyCharm le suggère, utiliser global est souvent une mauvaise idée car ça rend le code plus compliqué à suivre. Il vaut mieux passer les informations nécessaires à la fonction via ses arguments et récupérer le résultat avec return.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Tout le problème vient de votre entêtement à ne pas voir que vous n'en avez pas besoin.
C'est bien d'être un peu obstiné mais lachez prise de temps en temps, ça repose!
Faites un peu travailler vos neurones, quelle est la différence entre [[a1,b1],[a2,b2]...] et [a1,b1,a2,b2,....]?
Essentiellement que le lien entre 2 items consécutifs est explicite (les [] regroupent) ou pas (même si "on voit" les paires de chiffres successifs dans les labels).
Vous étiez parti de :
qui plante de temps en temps avec "ValueError: not enough values to unpack..." parce qu'o travaille sur la liste "plate". Si not e[field], on se retrouve avec un item en moins à la sortie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part items2 = [e[field] for field in fields if e[field]]
Quand j'écris:
Je refabrique l'association explicite [(a, b), (c, d), ...] pour ne garder le tuple que si le 2nd item existe. Dit autrement, c'est pas tout de virer un items mais il faut aussi pouvoir virer celui qui lui est associé... et cela n'est pas facile à faire sans association explicite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part items2 = [ (e[a], e[b]) for (a, b) in batched(fields, 2) if e[b] ]
Et dans cette histoire il n'y a pas de "python", c'est juste une histoire de façon pratique de regrouper des objets dans des boîtes et de le faire de façon cohérente avec ce que sait faire un ordinateur: des boucles emboitées, listes composites, ...
Et n'oubliez pas qu'il n'y a rien de naturel dans un ordinateur, il a été fabriqué pour être efficace et sera un bon serviteur pour autant que vous compreniez comment il fonctionne.
- W
Sans parler du pourquoi et du comment tu te retrouves avec ce genre de structure, il y a des outils déjà existants permettant de faire ce travail de "mettre à plat"...
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 >>> keys= [["a1", "b1"], ["a2", "b2"], ["a3", "b3"]] >>> import itertools >>> tuple(itertools.chain.from_iterable(keys)) ('a1', 'b1', 'a2', 'b2', 'a3', 'b3') >>>
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Tu prends le problème complètement à l'envers.
Il faut dans un premier temps que tu saches ce que tu dois avoir pour extraire les données. En fonction de ton besoin, tu vas alors créer une structure (voire même pas)
Quel est l'intéret pour toi Marco de boucler pour créer une structure puis dans un second temps boucler sur cette structure (pour la modifier ou non) et enfin extraire les données
speudo code : puisque j'utilise une boucle classique (bien comprise par Marcopololo ?), je n'ai même pas a créer une structure pour ensuite encore boucler dessus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 travaux = [] A, B ="date", "remarque" for i := range 1..7: ka, kb = f"{A}{i}", f"{B}{i}" si ka est pas dans e: continue # en fonction des regles métier désirées : # ? si kb est pas dans e: continue # ? si e[kb] est vide ? continue # ? remarque = e[kb] si kb est dans e sinon "" travaux.append( f" date: {e[ka}} \t remarque: {e[kb]}" ) print(len(travaux) , "travaux") print("\n".join(travaux))
$moi= (:nono: !== :oops:) ? :king: : :triste: ;
On a d'ailleurs un exercice qui reflète bien ce sujet (apprendre à traiter une structure X pour en générer une structure Y) : https://python.developpez.com/exerci...e-des-familles.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager