Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3018

Re: Tracer une courbe à partir d'un fichier text

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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