Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 07-12-2018 10:06:39
- boucle sur des listes
- Invité
boucle en python
Bonjour, j'aimerais créer un programme qui me permettrai de comparer plusieurs liste à une liste mère.
Ensuite techniquement j'aimerais que mo programme sorte : que tels élements de a sont dans liste_mere etc
ca fonctionne quand il n'y a pas de boucle mais la boucle n'est pas bouclé heheh
J'ai deja fait ca, mais ca ne fonctionne pas, auriez vous une idée ?
"""liste fille
"""
a=[7, 7, 15, 0, 14, 20, 7, 10, 19, 15, 3, 5, 7, 20, 4, 14, 26, 19, 17, 15]
b=[6, 9, 21, 12, 17, 25, 27, 2, 25, 17, 21, 14, 17, 26, 15, 4, 24, 25, 14, 8]
c=[13, 16, 20, 24, 18, 26, 11, 1, 25, 1, 6, 26, 15, 15, 17, 15, 7, 27, 5, 24]
d=[28, 10, 19, 1, 27, 2, 27, 2, 17, 23, 26, 28, 28, 22, 27, 18, 8, 24, 25, 24]
e=[11, 26, 13, 5, 27, 9, 24, 0, 11, 1, 24, 17, 6, 11, 23, 9, 21, 8, 21, 3]
f=[11, 28, 27, 19, 15, 21, 10, 11, 5, 12, 10, 6, 13, 9, 26, 10, 4, 5, 6, 26]
g=[23, 20, 24, 16, 3, 24, 6, 23, 18, 18, 2, 25, 15, 13, 20, 14, 24, 0, 26, 20]
"""liste mère qui sera l'équivalent du fichier composé"""
liste_mere = [4, 15, 17, 3, 8, 3, 28, 1, 1, 28, 4, 2, 2, 8, 28, 6, 11, 25, 24, 9, 15, 9, 3, 5, 29, 8, 8, 8, 2, 22, 24, 4, 20, 5, 12, 29, 25, 4, 22, 2]
"""début du programme """
while (L==0):
L=set()
marge=0
for i in liste_mere:
for j in (a):
if abs (i-j)==marge:
L.add(i)
print (L)
#2 07-12-2018 12:56:56
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 948
Re : boucle en python
Salut,
Je ne comprends pas bien ce que tu cherches à faire...
add() ne fonctionne qu'avec set() : il n'ajoute un élément que s'il n'est déjà pas présent.
Si tu passes en revue toutes les listes filles, à la sortie, L ne sera pas identique à ta liste mère puisque celle-ci contient des doublons et L, non Je ne vois pas à quoi sert marge...
Tu faisais appel à la liste L avec
while L==0:
2 erreurs :
Python ne pouvait que râler : L n'était défini qu'après, la liste L ne peut être égale à 0 = Liste $\neq$ nombre...
Un peu du même ordre que si tu écrivais while tortue ==oiseau:
Pourquoi : if abs (i-j)==0: ? if j==i: ne te conviendrait pas ?
Code fonctionnel (et amélioré)
"""
a=[7, 7, 15, 0, 14, 20, 7, 10, 19, 15, 3, 5, 7, 20, 4, 14, 26, 19, 17, 15]
b=[6, 9, 21, 12, 17, 25, 27, 2, 25, 17, 21, 14, 17, 26, 15, 4, 24, 25, 14, 8]
c=[13, 16, 20, 24, 18, 26, 11, 1, 25, 1, 6, 26, 15, 15, 17, 15, 7, 27, 5, 24]
d=[28, 10, 19, 1, 27, 2, 27, 2, 17, 23, 26, 28, 28, 22, 27, 18, 8, 24, 25, 24]
e=[11, 26, 13, 5, 27, 9, 24, 0, 11, 1, 24, 17, 6, 11, 23, 9, 21, 8, 21, 3]
f=[11, 28, 27, 19, 15, 21, 10, 11, 5, 12, 10, 6, 13, 9, 26, 10, 4, 5, 6, 26]
g=[23, 20, 24, 16, 3, 24, 6, 23, 18, 18, 2, 25, 15, 13, 20, 14, 24, 0, 26, 20]
"""liste mère qui sera l'équivalent du fichier composé"""
liste_mere = [4, 15, 17, 3, 8, 3, 28, 1, 1, 28, 4, 2, 2, 8, 28, 6, 11, 25, 24, 9, 15, 9, 3, 5, 29, 8, 8, 8, 2, 22, 24, 4, 20, 5, 12, 29, 25, 4, 22, 2]
"""début du programme """
Dico={0:a,1:b,2:c,3:d,4:e,5:f,6:g}
L=set()
for numliste in range(7):
#marge=0
A=Dico[numliste]
for i in liste_mere:
for j in A:
if abs (i-j)==0:
L.add(i)
print (L)
J'ai créé un dictionnaire contenant les noms des listes que j'ai indexées
Dico[numliste] appelle la liste n° numliste.
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#3 07-12-2018 13:43:42
- reponse
- Invité
Re : boucle en python
dans un premier temps merci bcp pour le temps que vous avez pris, mais c'est pas exactement ca que je souhaite faire, enfaite je souhaite un faire un programme d'identification en quelque sorte.
Imaginons 5 éléments de la liste a sont dans la liste mere, alors je veux que le programme me dise que a est dans la liste mere
et ainsi de suite, je sais pas si je suis claire :p
Et marge sert à faire une marge d'erreur, car les informations que je vais traiter par la suite aurons une marge d'erreur car proviendront de mesure réel et non théorique
#4 07-12-2018 15:36:46
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 948
Re : boucle en python
Re,
Imaginons 5 éléments de la liste a sont dans la liste mere, alors je veux que le programme me dise que a est dans la liste mere
Alors à quoi sert ton set de L ?
A quoi sert de stocker ces éléments dans L ?
A quoi sert d'afficher L ?
A quoi servait ta boucle while L==0 qui bouclait tant qu'une chaise = un oiseau (par ex) ?
Tu as maintenant un script qui fonctionne, modifie-le à ta guise pour répondre à tes besoins...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#5 07-12-2018 20:09:29
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 948
Re : boucle en python
Re,
J'avais un peu de temps pour m'amuser :
"""listes filles
"""
a=[7, 7, 15, 0, 14, 20, 7, 10, 19, 15, 3, 5, 7, 20, 4, 14, 26, 19, 17, 15]
b=[6, 9, 21, 12, 17, 25, 27, 2, 25, 17, 21, 14, 17, 26, 15, 4, 24, 25, 14, 8]
c=[13, 16, 20, 24, 18, 26, 11, 1, 25, 1, 6, 26, 15, 15, 17, 15, 7, 27, 5, 24]
d=[28, 10, 19, 1, 27, 2, 27, 2, 17, 23, 26, 28, 28, 22, 27, 18, 8, 24, 25, 24]
e=[11, 26, 13, 5, 27, 9, 24, 0, 11, 1, 24, 17, 6, 11, 23, 9, 21, 8, 21, 3]
f=[11, 28, 27, 19, 15, 21, 10, 11, 5, 12, 10, 6, 13, 9, 26, 10, 4, 5, 6, 26]
g=[23, 20, 24, 16, 3, 24, 6, 23, 18, 18, 2, 25, 15, 13, 20, 14, 24, 0, 26, 20]
"""liste mère qui sera l'équivalent du fichier composé"""
liste_mere = [4, 15, 17, 3, 8, 3, 28, 1, 1, 28, 4, 2, 2, 8, 28, 6, 11, 25, 24, 9, 15, 9, 3, 5, 29, 8, 8, 8, 2, 22, 24, 4, 20, 5, 12, 29, 25, 4, 22, 2]
"""début du programme """
Dico={0:a,1:b,2:c,3:d,4:e,5:f,6:g}
Phrase='Aucune correspondance trouvée'
Temp=[]
L=set()
print(" ** Sont présents dans la liste mère : **\n")
for numliste in range(7):
marge=0
ListeFille=set(Dico[numliste])
ListeMere=set(liste_mere)
print("Dans la liste fille "+chr(97+numliste))
for i in ListeMere:
for j in ListeFille:
if abs (i-j)==marge:
print(j,end=" ")
L.add(j)
Temp.append(j)
if Temp==[]:
print(Phrase,"\n")
Temp=[]
print("\n")
print ("L =",L)
Sortie :
** Sont présents dans la liste mère : **
Dans la liste fille a
3 4 5 15 17 20Dans la liste fille b
2 4 6 8 9 12 15 17 24 25Dans la liste fille c
1 5 6 11 15 17 20 24 25Dans la liste fille d
1 2 8 17 22 24 25 28Dans la liste fille e
1 3 5 6 8 9 11 17 24Dans la liste fille f
4 5 6 9 11 12 15 28Dans la liste fille g
2 3 6 15 20 24 25L = {1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 15, 17, 20, 22, 24, 25, 28}
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#6 10-12-2018 08:30:47
- enguerrand
- Membre
- Inscription : 10-12-2018
- Messages : 1
Re : boucle en python
C'est effectivement ca qu'il me fallait,
merci infiniment
et bien enfaite le L avec ta méthode de traitement du problème sert tout simplement à rien :p
je me penche un peu sur le code, et tout est assez claire, merci encore
vraiment merci !
Hors ligne
#7 10-12-2018 13:48:33
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 948
Re : boucle en python
Rez,
Les set() sont utilisés pour supprimer les doublons (et - accessoirement -, ranger les éléments par ordre croissant) : ça évite la gestion - pas simple -des doublons...
Plutôt qu'utiliser ta variable marge, je t'invite à te pencher sur la fonction isclose() :
math.isclose (a, b, *, rel_tol = 1e-09, abs_tol = 0.0)
Renvoie True si les valeurs a et b sont proches et False sinon.
Le fait que deux valeurs soient considérées proches ou non est déterminé en fonction de tolérances absolues et relatives données.
rel_tol est la tolérance relative - c'est la différence maximale autorisée entre a et b, par rapport à la plus grande valeur absolue de a ou b. Par exemple, pour définir une tolérance de 5%, transmettez rel_tol = 0.05. La tolérance par défaut est 1e-09, ce qui garantit que les deux valeurs sont identiques à environ 9 chiffres décimaux. rel_tol doit être supérieur à zéro.
abs_tol est la tolérance absolue minimale - utile pour les comparaisons proches de zéro. abs_tol doit être au moins égal à zéro.
Si aucune erreur ne se produit, le résultat sera: abs (a-b) <= max (rel_tol * max (abs (a), abs (b)), abs_
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
Pages : 1
Discussion fermée