Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3018
| From | Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> |
|---|---|
| Newsgroups | fr.comp.lang.python |
| Subject | Re: Tracer une courbe à partir d'un fichier text |
| Date | 2018-01-20 18:12 +0100 |
| Organization | Université de Strasbourg |
| Message-ID | <8737301mk6.fsf@universite-de-strasbourg.fr.invalid> (permalink) |
| References | <2f5f9fc0-2db0-49f2-830c-b86bda4dd63c@googlegroups.com> |
baladjy@gmail.com writes:
> X Y
> 0 47047.969
> 1 46959.758
[...]
> import matplotlib.pyplot as plt
> import numpy as np
>
> f = open("Values.txt" , 'r')
> t = f.readlines()
> t.remove(t[0])
> list = []
C'est une très mauvaise idée d'appeler quelque chose "list", qui est un
nom built-in (une classe en fait). Bref, supposons que ça s'appelle
"liste" à la place (j'ai corrigé dans la suite).
> for i in t:
> liste.append(i.split())
Un premier parcours pour casser les chaînes en morceaux. Après ça, liste
est de la forme :
[ ["0","47047.969"],...] (une liste de liste)
Au fait, les compteurs de boucle peuvent s'appeler autrement que i.
> for i in range(len(liste)):
> value=liste[i]
Bon c'est pas le peine de déranger len() et range() si c'est pour
ensuite utiliser liste[i]. Il suffirait de faire :
for value in liste:
... etc ...
A ce stade, value est de la forme ["0","47047.969"]
> #print(value)
> w =[]
Tu peux aussi écrire "w = list()" c'est pareil. Enfin sauf si tu as
redéfini le nom "list".
> for i in range(len(value)):
Encore i ! Y en a marre des i. Trouve d'autres noms. Ça rend ton
programme difficile à suivre. En plus, c'est dangereux. Essaie :
for i in [0,1,2]:
for i in ["a","b","c"]:
pass
print(i) # <- quel i ? Ca affiche quoi ?
Sinon, même remarque aussi que ci-dessus (for w in value). Mais ici on
sait que la liste a deux éléments, donc c'est pas peine de (re-)déranger
len() : for i in range(2). En fait, c'est même pas la peine de faire une
boucle, tu peux utiliser directement value[0] et value[1].
Note que ma remarque est discutable (il pourrait y avoir des lignes avec
plus que deux champs). Mais il semble que considérer qu'il y toujours
deux champs est raisonnable ici, au moins dans un premier temps.
> w = value[i]
Note que tu oublies la liste que tu avais créée plus haut...
La variable w aura la valeur "0" au premier tour, et "47047.969"
au deuxième (et dernier) tour de la boucle interne. (Je prends l'exemple
du premier tour de la boucle externe : au deuxième tour de la boucle
externe tu auras les valeurs "1" et "46959.758", etc.)
> w = float(w)
Écrire directement "w = float(value[i])" économise une ligne.
> y = []
> y.append(w)
Rappel : ce morceau de code est exécuté pour "0" puis pour "47047.969".
Est-ce vraiment ce que tu veux ? Le "0" n'a pas l'air d'être un y.
La réponse est non.
En plus tu crées une nouvelle liste (avec []) pour chaque valeur. Ça ne
peut pas marcher, puisque tu mets chaque valeur dans une liste
différente. Ce n'est pas le bon endroit pour créer la liste des y.
> print(y[:,0])
Je ne sais pas ce que tu essaies de faire là, mais sache que c'est
impoli de montrer à quelqu'un du code sans vérifier qu'il est au moins
syntaxiquement correct (c'est-à-dire quand ce n'est même pas de code).
Ce n'est pas grave qu'il soit faux, mais là ton truc n'est "même pas
faux" comme on dit : c'est rien. Python te le dira.
> Comment fait on pour créer une liste pour x et une autre liste pour y?
Tu as un problème avec tes boucles. Oublie python un instant et écrit
ton algorithme. Tu arrives à quelque chose comme :
pour chaque "ligne" dans "t":
ajouter le couple ligne.split() à "liste"
créer deux listes vides, une pour les x une pour les y
pour chaque "couple" dans "liste":
ajouter le premier élément de "couple" à "liste_des_x"
ajouter le second élément de "couple" à "liste_des_y"
Ensuite : est-ce qu'il faut vraiment faire deux boucles ?
Bref : à toi de jouer. Personne ne va faire tes devoirs. Quand tu auras
un programme qui marche, on pourra t'expliquer comment l'écrire en deux
lignes (voire une seule), si tu veux.
> et ensuite le tracer ?
C'est matplotlib qui s'occupe de ça : il faut lire la documentation.
-- Alain.
Back to fr.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
Tracer une courbe à partir d'un fichier text baladjy@gmail.com - 2018-01-20 06:59 -0800
Re: Tracer une courbe à partir d'un fichier text Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2018-01-20 18:12 +0100
Re: Tracer une courbe à partir d'un fichier text baladjy@gmail.com - 2018-01-20 12:45 -0800
Re: Tracer une courbe à partir d'un fichier text yves <yves@free.invalid> - 2018-01-21 10:35 +0000
Re: Tracer une courbe à partir d'un fichier text yves <yves@free.invalid> - 2018-01-21 16:01 +0000
Re: Tracer une courbe à partir d'un fichier text marc@marc.marc - 2018-01-22 13:41 +0100
csiph-web