IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Arrondir un nombre et le mettre dans une liste [Python 2.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Points : 15
    Points
    15
    Par défaut Arrondir un nombre et le mettre dans une liste
    Bonjour,

    Je fonctionne sous la version python 2.6.
    Je souhaite arrondir le nombre 1.5464654 à tant de chiffres après la virgule et le mettre dans une liste.
    J'arrive à l'arrondir avec la fonction round() mais lorsque je mets le nombre dans la liste ça annule mon arrondi.
    Voici mon programme:


    #--- Programme qui change une coordonnée (x,y ou z) de toute une matrice ---#
    from Tkinter import *
    from math import *

    def ok():
    # Permet de compter le nombre de lignes dans matrice.txt
    fi=open("matrice.txt")
    nb=0
    for ligne in fi:
    nb=nb+1
    fi.close()
    # Permet d'extraire les valeurs x,y,z de matrice.txt et de les remplacer par x+u,y+v,z+w. (u,v,z étant les valeurs choisies par l'utilisateur).
    fi=open("matrice.txt")
    ensemble=''
    for i in range(nb):
    liste=fi.readline().replace("\n","").replace('[','').replace(']','')
    x,y,z=liste.split(",")
    u=float(E1.get())
    v=float(E2.get())
    w=float(E3.get())
    print E4.get()
    if E4.get()=='':
    x=float(x)+u
    y=float(y)+v
    z=float(z)+w
    else:
    a=int(E4.get())
    print a
    x=round(float(x),a)
    print x
    x=x+u
    print x
    y=round(float(y)+v,a)
    z=round(float(z)+w,a)
    liste2=[x,y,z]
    print liste2
    ensemble=ensemble+str(liste2)+"\n"
    fi.close()
    # Permet d'insérer x+u,y+v,z+w dans matrice2.txt
    fi2=open("matrice2.txt","w")
    fi2.write(str(ensemble))
    fi2.close()
    fi2=open('matrice2.txt')
    nb=0
    for ligne in fi2:
    nb=nb+1
    fi2.close()
    fi2=open('matrice2.txt')
    list=''
    for i in range (nb):
    list=list+fi2.readline()
    fi2.close()
    L4.config(text=list)
    L.config(text="Finished !")



    fe=Tk()
    fe.title("coordinate change")
    fe.geometry('1250x1000')
    L=Label(fe,text='This program allows to increase or decrease one of the coordinates (X, Y or Z) of a [X,Y,Z] matrice such as: \n [15,1.454,0.1]\n[12.1,5.2,78]\n[0.3,0,45]\n(...)\n\n Please copy your matrice in a file whose the name is matrice.txt.\nPut the file in the same directory than this program. The new matrice will be in the file named matrice2.txt.',font=('Arial',17,'bold'))
    L.place(x=20,y=50)
    LX=Label(fe,text='X',font=('Helvetica',15,'underline'))
    LX.place(x=200,y=450)
    LY=Label(fe,text='Y',font=('Helvetica',15,'underline'))
    LY.place(x=200,y=550)
    LZ=Label(fe,text='Z',font=('Helvetica',15,'underline'))
    LZ.place(x=200,y=650)

    L1=Label(fe,text='Give the value(s)',font=('Helvetica',15,'underline'))
    L1.place(x=400,y=410)
    E1=Entry(fe)
    E1.place(x=400,y=450)
    E1.insert(0,0)
    E2=Entry(fe)
    E2.place(x=400,y=550)
    E2.insert(0,0)
    E3=Entry(fe)
    E3.place(x=400,y=650)
    E3.insert(0,0)

    L2=Label(fe,text='Contenu de matrice.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=320)
    fi=open("matrice.txt")
    nb=0
    for ligne in fi:
    nb=nb+1
    fi.close()
    fi=open('matrice.txt')
    list=''
    for i in range (nb):
    list=list+fi.readline()
    fi.close()
    L3=Label(fe,text=list)
    L3.place(x=1000,y=350)

    L2=Label(fe,text='Contenu de matrice2.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=620)
    L4=Label(fe,text='')
    L4.place(x=1000,y=650)

    B=Button(fe,text='OK',width=25,command=ok)
    B.place(x=600,y=550)

    L5=Label(fe,text='Voulez-vous arrondir ? Si oui, mettez le nombre de chiffres après la virgule que vous souhaitez faire apparaître :')
    L5.place(x=0,y=320)
    E4=Entry(fe)
    E4.place(x=600,y=320)

    fe.mainloop()


    Voici un fichier matrice.txt à titre d'exemple:

    [0,0,0]
    [1,1,1]
    [1.5464654,1,1]

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Bonjour,
    Sans les balises de code "#" en haut au milieu de la fenêtre d'édition, le code est ainsi totalement illisible!!

    Clodion

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    #--- Programme qui change une coordonnée (x,y ou z) de toute une matrice ---#
    from Tkinter import *
    from math import *
     
    def ok():
    # Permet de compter le nombre de lignes dans matrice.txt
    fi=open("matrice.txt")
    nb=0
    for ligne in fi:
    nb=nb+1
    fi.close()
    # Permet d'extraire les valeurs x,y,z de matrice.txt et de les remplacer par x+u,y+v,z+w. (u,v,z étant les valeurs choisies par l'utilisateur).
    fi=open("matrice.txt")
    ensemble=''
    for i in range(nb):
    liste=fi.readline().replace("\n","").replace('[','').replace(']','')
    x,y,z=liste.split(",")
    u=float(E1.get())
    v=float(E2.get())
    w=float(E3.get())
    print E4.get()
    if E4.get()=='':
    x=float(x)+u
    y=float(y)+v
    z=float(z)+w
    else:
    a=int(E4.get())
    print a
    x=round(float(x),a)
    print x
    x=x+u
    print x
    y=round(float(y)+v,a)
    z=round(float(z)+w,a)
    liste2=[x,y,z]
    print liste2
    ensemble=ensemble+str(liste2)+"\n"
    fi.close()
    # Permet d'insérer x+u,y+v,z+w dans matrice2.txt
    fi2=open("matrice2.txt","w")
    fi2.write(str(ensemble))
    fi2.close()
    fi2=open('matrice2.txt')
    nb=0
    for ligne in fi2:
    nb=nb+1
    fi2.close()
    fi2=open('matrice2.txt')
    list=''
    for i in range (nb):
    list=list+fi2.readline()
    fi2.close()
    L4.config(text=list)
    L.config(text="Finished !")
     
     
     
    fe=Tk()
    fe.title("coordinate change")
    fe.geometry('1250x1000')
    L=Label(fe,text='This program allows to increase or decrease one of the coordinates (X, Y or Z) of a [X,Y,Z] matrice such as: \n [15,1.454,0.1]\n[12.1,5.2,78]\n[0.3,0,45]\n(...)\n\n Please copy your matrice in a file whose the name is matrice.txt.\nPut the file in the same directory than this program. The new matrice will be in the file named matrice2.txt.',font=('Arial',17,'bold'))
    L.place(x=20,y=50)
    LX=Label(fe,text='X',font=('Helvetica',15,'underline'))
    LX.place(x=200,y=450)
    LY=Label(fe,text='Y',font=('Helvetica',15,'underline'))
    LY.place(x=200,y=550)
    LZ=Label(fe,text='Z',font=('Helvetica',15,'underline'))
    LZ.place(x=200,y=650)
     
    L1=Label(fe,text='Give the value(s)',font=('Helvetica',15,'underline'))
    L1.place(x=400,y=410)
    E1=Entry(fe)
    E1.place(x=400,y=450)
    E1.insert(0,0)
    E2=Entry(fe)
    E2.place(x=400,y=550)
    E2.insert(0,0)
    E3=Entry(fe)
    E3.place(x=400,y=650)
    E3.insert(0,0)
     
    L2=Label(fe,text='Contenu de matrice.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=320)
    fi=open("matrice.txt")
    nb=0
    for ligne in fi:
    nb=nb+1
    fi.close()
    fi=open('matrice.txt')
    list=''
    for i in range (nb):
    list=list+fi.readline()
    fi.close()
    L3=Label(fe,text=list)
    L3.place(x=1000,y=350)
     
    L2=Label(fe,text='Contenu de matrice2.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=620)
    L4=Label(fe,text='')
    L4.place(x=1000,y=650)
     
    B=Button(fe,text='OK',width=25,command=ok)
    B.place(x=600,y=550)
     
    L5=Label(fe,text='Voulez-vous arrondir ? Si oui, mettez le nombre de chiffres après la virgule que vous souhaitez faire apparaître :')
    L5.place(x=0,y=320)
    E4=Entry(fe)
    E4.place(x=600,y=320)
     
    fe.mainloop()

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Désolé, il manquait les indentations.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
     
    #--- Programme qui change une coordonnée (x,y ou z) de toute une matrice ---#
    from Tkinter import *
    from math import *
     
    def ok():
        # Permet de compter le nombre de lignes dans matrice.txt
        fi=open("matrice.txt")
        nb=0
        for ligne in fi:
            nb=nb+1
        fi.close()
        # Permet d'extraire les valeurs x,y,z de matrice.txt et de les remplacer par x+u,y+v,z+w. (u,v,z étant les valeurs choisies par l'utilisateur).
        fi=open("matrice.txt")
        ensemble=''
        for i in range(nb):
            liste=fi.readline().replace("\n","").replace('[','').replace(']','')
            x,y,z=liste.split(",")
            u=float(E1.get())
            v=float(E2.get())
            w=float(E3.get())
            print E4.get()
            if E4.get()=='':
                x=float(x)+u
                y=float(y)+v
                z=float(z)+w
            else:
                a=int(E4.get())
                print a
                x=round(float(x),a)
                print x
                x=x+u
                print x
                y=round(float(y)+v,a)
                z=round(float(z)+w,a)
            liste2=[x,y,z]
            print liste2
            ensemble=ensemble+str(liste2)+"\n"
        fi.close()
        # Permet d'insérer x+u,y+v,z+w dans matrice2.txt
        fi2=open("matrice2.txt","w")
        fi2.write(str(ensemble))
        fi2.close()
        fi2=open('matrice2.txt')
        nb=0
        for ligne in fi2:
            nb=nb+1
        fi2.close()
        fi2=open('matrice2.txt')
        list=''
        for i in range (nb):
            list=list+fi2.readline()
        fi2.close()
        L4.config(text=list)
        L.config(text="Finished !")
     
     
     
    fe=Tk()
    fe.title("coordinate change")
    fe.geometry('1250x1000')
    L=Label(fe,text='This program allows to increase or decrease one of the coordinates (X, Y or Z) of a [X,Y,Z] matrice such as: \n [15,1.454,0.1]\n[12.1,5.2,78]\n[0.3,0,45]\n(...)\n\n Please copy your matrice in a file whose the name is matrice.txt.\nPut the file in the same directory than this program. The new matrice will be in the file named matrice2.txt.',font=('Arial',17,'bold'))
    L.place(x=20,y=50)
    LX=Label(fe,text='X',font=('Helvetica',15,'underline'))
    LX.place(x=200,y=450)
    LY=Label(fe,text='Y',font=('Helvetica',15,'underline'))
    LY.place(x=200,y=550)
    LZ=Label(fe,text='Z',font=('Helvetica',15,'underline'))
    LZ.place(x=200,y=650)
     
    L1=Label(fe,text='Give the value(s)',font=('Helvetica',15,'underline'))
    L1.place(x=400,y=410)
    E1=Entry(fe)
    E1.place(x=400,y=450)
    E1.insert(0,0)
    E2=Entry(fe)
    E2.place(x=400,y=550)
    E2.insert(0,0)
    E3=Entry(fe)
    E3.place(x=400,y=650)
    E3.insert(0,0)
     
    L2=Label(fe,text='Contenu de matrice.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=320)
    fi=open("matrice.txt")
    nb=0
    for ligne in fi:
        nb=nb+1
    fi.close()
    fi=open('matrice.txt')
    list=''
    for i in range (nb):
        list=list+fi.readline()
    fi.close()
    L3=Label(fe,text=list)
    L3.place(x=1000,y=350)
     
    L2=Label(fe,text='Contenu de matrice2.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=620)
    L4=Label(fe,text='')
    L4.place(x=1000,y=650)
     
    B=Button(fe,text='OK',width=25,command=ok)
    B.place(x=600,y=550)
     
    L5=Label(fe,text='Voulez-vous arrondir ? Si oui, mettez le nombre de chiffres après la virgule que vous souhaitez faire apparaître :')
    L5.place(x=0,y=320)
    E4=Entry(fe)
    E4.place(x=600,y=320)
     
    fe.mainloop()

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    D'où vient cette idée de compter les lignes d'un texte avant de le lire ? J'ai d'ailleurs, pour cette raison, l'impression d'avoir déjà vu ce code.

    Et il ne faut pas utiliser de terme du langage pour tes propres noms, donc list = "" est à proscrire.

    Commence par remplacer ces lignes de ton code (86 à 95)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    fi=open("matrice.txt")
    nb=0
    for ligne in fi:
        nb=nb+1
    fi.close()
    fi=open('matrice.txt')
    list=''
    for i in range (nb):
        list=list+fi.readline()
    fi.close()
    L3=Label(fe,text=list)
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    with open("matrice.txt") as inf:
        lines = inf.readlines()
    L3=Label(fe,text=line)
    et pour ta fonction ok(), ceci devrait suffire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    def ok():
        # Permet de compter le nombre de lignes dans matrice.txt
        with open("matrice.txt") as inf:
            lines = inf.readlines()
     
        roundval = E4.get()
        entries = [float(E1.get()), float(E2.get()), float(E3.get())]
        news = ""
        for line in lines:
            vals = line.strip().replace('[','').replace(']','').split(',')
            new = []
            for i, j in zip(vals, entries):
                s = float(i) + j
                if roundval:
                    s = round(s, roundval)
     
                new.append(s)
     
            news = news + str(new) + '\n'
     
        with open('matrice2.txt') as outf:
            outf.write(news)
     
        L4.config(text = news)
        L.config(text = "Finished !")
    ... pas testé

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si je puis me permettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    # this script is Python2.6 compatible
     
    def get_matrix_data (path):
        """
            extrait des données d'un fichier texte contenant des lignes
            de matrices [x, y, z];
        """
        with open(path) as fichier:
            lignes = fichier.readlines()
            for index, ligne in enumerate(lignes):
                lignes[index] = eval(ligne)
            # end for
            return lignes
        # end with
    # end def
     
    def matrix_add (matrix, vector, round_n=None):
        """
            additionne les valeurs du tableau @vector à chaque ligne de
            la matrice @matrix en appliquant un arrondi @round_n au
            résultat final si @round_n != None;
        """
        # sous-fonction
        def sum_up (tuple_ab):
            a, b = tuple_ab
            s = float(a) + float(b)
            if round_n != None:
                return round(s, round_n)
            else:
                return s
            # end if
        # end def
        return [map(sum_up, zip(row, vector)) for row in matrix]
    # end def
     
    def fancy_matrix (matrix):
        """
            formate l'apparence d'une matrice pour qu'elle présente bien
            en sortie console;
        """
        return "[\n {0},\n]".format(",\n ".join(map(str, matrix)))
    # end def
     
     
    # test demo
     
    data = get_matrix_data("matrice.txt")
     
    print "données du fichier :"
     
    print fancy_matrix(data)
     
    vector = [1.33654721, 2.89774547, 3.66987418]
     
    arrondi = 4     # chiffres après la virgule
     
    print "\non additionne", vector
     
    print "\navec un arrondi de", arrondi, "chiffres après la virgule"
     
    data = matrix_add(data, vector, arrondi)
     
    print "\nrésultat :"
     
    print fancy_matrix(data)
    Utilisé avec un fichier matrice.txt bidon pour servir d'échantillon de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [1.255, 12.33, 6.145]
    [-12.003, 10.352, 25.36]
    [2.35, -45.336, 45.312]
    [12.354, 11.369, -12.45]
    [1.63398, 3.5687, 12.4587]
    J'obtiens la sortie suivante :

    données du fichier :
    [
    [1.255, 12.33, 6.145],
    [-12.003, 10.352, 25.36],
    [2.35, -45.336, 45.312],
    [12.354, 11.369, -12.45],
    [1.63398, 3.5687, 12.4587],
    ]

    on additionne [1.33654721, 2.89774547, 3.66987418]

    avec un arrondi de 4 chiffres après la virgule

    résultat :
    [
    [2.5915, 15.2277, 9.8149],
    [-10.6665, 13.2497, 29.0299],
    [3.6865, -42.4383, 48.9819],
    [13.6905, 14.2667, -8.7801],
    [2.9705, 6.4664, 16.1286],
    ]
    EDIT: dsl VinsS, je n'avais pas vu que tu avais répondu pendant que je rédigeais mon script.

    @+.

  7. #7
    Invité
    Invité(e)
    Par défaut
    On peut même optimiser le truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    # this script is Python2.6 compatible
     
    def get_matrix_data (path):
        """
            extrait des données d'un fichier texte contenant des lignes
            de matrices [x, y, z];
        """
        with open(path) as fichier:
            return map(eval, fichier.readlines())
        # end with
    # end def
     
    def matrix_add (matrix, vector, round_n=None):
        """
            additionne les valeurs du tableau @vector à chaque ligne de
            la matrice @matrix en appliquant un arrondi @round_n au
            résultat final si @round_n != None;
        """
        # sous-fonction
        def sum_up (tuple_ab):
            a, b = tuple_ab
            s = float(a) + float(b)
            if round_n != None:
                return round(s, round_n)
            else:
                return s
            # end if
        # end def
        return [map(sum_up, zip(row, vector)) for row in matrix]
    # end def
     
    def fancy_matrix (matrix):
        """
            formate l'apparence d'une matrice pour qu'elle présente bien
            en sortie console;
        """
        return "[\n {0},\n]".format(",\n ".join(map(str, matrix)))
    # end def
     
     
    # test demo
     
    data = get_matrix_data("matrice.txt")
     
    print "données du fichier :"
     
    print fancy_matrix(data)
     
    vector = [1.33654721, 2.89774547, 3.66987418]
     
    arrondi = 4     # chiffres après la virgule
     
    print "\non additionne", vector
     
    print "\navec un arrondi de", arrondi, "chiffres après la virgule"
     
    data = matrix_add(data, vector, arrondi)
     
    print "\nrésultat :"
     
    print fancy_matrix(data)
    @+.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    A VinsS :
    Merci ça me fait 35 lignes en moins maintenant ^^

    Voici le code modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #--- Programme qui change une coordonnée (x,y ou z) de toute une matrice ---#
    from Tkinter import *
    from math import *
     
    def ok():
        with open("matrice.txt") as inf:
            lines = inf.readlines()
     
        roundval = int(E4.get())
        entries = [float(E1.get()), float(E2.get()), float(E3.get())]
        news = ""
        for line in lines:
            vals = line.strip().replace('[','').replace(']','').split(',')
            new = []
            for i, j in zip(vals, entries):
                s = float(i) + j
                if roundval:
                    s = round(s, roundval)
     
                new.append(s)
     
            news = news + str(new) + '\n'
     
        with open('matrice2.txt','w') as outf:
            outf.write(news)
     
        L4.config(text = news)
        L.config(text = "Finished !")
     
    fe=Tk()
    fe.title("coordinate change")
    fe.geometry('1250x1000')
    L=Label(fe,text='This program allows to increase or decrease one of the coordinates (X, Y or Z) of a [X,Y,Z] matrice such as: \n [15,1.454,0.1]\n[12.1,5.2,78]\n[0.3,0,45]\n(...)\n\n Please copy your matrice in a file whose the name is matrice.txt.\nPut the file in the same directory than this program. The new matrice will be in the file named matrice2.txt.',font=('Arial',17,'bold'))
    L.place(x=20,y=50)
    LX=Label(fe,text='X',font=('Helvetica',15,'underline'))
    LX.place(x=200,y=450)
    LY=Label(fe,text='Y',font=('Helvetica',15,'underline'))
    LY.place(x=200,y=550)
    LZ=Label(fe,text='Z',font=('Helvetica',15,'underline'))
    LZ.place(x=200,y=650)
     
    L1=Label(fe,text='Give the value(s)',font=('Helvetica',15,'underline'))
    L1.place(x=400,y=410)
    E1=Entry(fe)
    E1.place(x=400,y=450)
    E1.insert(0,0)
    E2=Entry(fe)
    E2.place(x=400,y=550)
    E2.insert(0,0)
    E3=Entry(fe)
    E3.place(x=400,y=650)
    E3.insert(0,0)
     
    L2=Label(fe,text='Contenu de matrice.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=320)
    with open("matrice.txt") as inf:
        lines = inf.readlines()
    L3=Label(fe,text=lines)
    L3.place(x=1000,y=350)
     
    L2=Label(fe,text='Contenu de matrice2.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=620)
    L4=Label(fe,text='')
    L4.place(x=1000,y=650)
     
    B=Button(fe,text='OK',width=25,command=ok)
    B.place(x=600,y=550)
     
    L5=Label(fe,text='Voulez-vous arrondir ? Si oui, mettez le nombre de chiffres après la virgule que vous souhaitez faire apparaître :')
    L5.place(x=0,y=320)
    E4=Entry(fe)
    E4.place(x=600,y=320)
     
    fe.mainloop()
    Par contre j'ai toujours le même problème d'arrondi quand je mets 2 en nombre de chiffre après la virgule et 2 pour la valeur de x à ajouter en prenant le fichier matrice.txt que j'ai donné en exemple.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    A tarball69 :
    J'ai toujours le même problème, je n'arrive pas à ajouter 2 à 1.5464654 et à arrondir ce nombre.
    Ca me donne 3.549999999...

    Voici le code intégré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    # this script is Python2.6 compatible
     
    def get_matrix_data (path):
        """
            extrait des données d'un fichier texte contenant des lignes
            de matrices [x, y, z];
        """
        with open(path) as fichier:
            return map(eval, fichier.readlines())
        # end with
    # end def
     
    def matrix_add (matrix, vector, round_n=None):
        """
            additionne les valeurs du tableau @vector à chaque ligne de
            la matrice @matrix en appliquant un arrondi @round_n au
            résultat final si @round_n != None;
        """
        # sous-fonction
        def sum_up (tuple_ab):
            a, b = tuple_ab
            s = float(a) + float(b)
            if round_n != None:
                return round(s, round_n)
            else:
                return s
            # end if
        # end def
        return [map(sum_up, zip(row, vector)) for row in matrix]
    # end def
     
    def fancy_matrix (matrix):
        """
            formate l'apparence d'une matrice pour qu'elle présente bien
            en sortie console;
        """
        return "[\n {0},\n]".format(",\n ".join(map(str, matrix)))
    # end def
     
    # test demo
     
    data = get_matrix_data("matrice.txt")
     
    print "données du fichier :"
     
    print fancy_matrix(data)
     
    print "\non additionne", vector
     
    print "\navec un arrondi de", arrondi, "chiffres après la virgule"
     
    data = matrix_add(data, vector, arrondi)
     
    print "\nrésultat :"
     
    print fancy_matrix(data)
    # fin test demo
     
    # programme originel :
    #--- Programme qui change une coordonnée (x,y ou z) de toute une matrice ---#
    from Tkinter import *
    from math import *
     
    def ok():
        arrondi = int(E4.get())
        vector = [float(E1.get()), float(E2.get()), float(E3.get())]
        data = get_matrix_data("matrice.txt")
        data = matrix_add(data, vector, arrondi)
        data =fancy_matrix(data)
        with open('matrice2.txt','w') as outf:
            outf.write(data)
     
        L4.config(text = data)
        L.config(text = "Finished !")
     
    fe=Tk()
    fe.title("coordinate change")
    fe.geometry('1250x1000')
    L=Label(fe,text='This program allows to increase or decrease one of the coordinates (X, Y or Z) of a [X,Y,Z] matrice such as: \n [15,1.454,0.1]\n[12.1,5.2,78]\n[0.3,0,45]\n(...)\n\n Please copy your matrice in a file whose the name is matrice.txt.\nPut the file in the same directory than this program. The new matrice will be in the file named matrice2.txt.',font=('Arial',17,'bold'))
    L.place(x=20,y=50)
    LX=Label(fe,text='X',font=('Helvetica',15,'underline'))
    LX.place(x=200,y=450)
    LY=Label(fe,text='Y',font=('Helvetica',15,'underline'))
    LY.place(x=200,y=550)
    LZ=Label(fe,text='Z',font=('Helvetica',15,'underline'))
    LZ.place(x=200,y=650)
     
    L1=Label(fe,text='Give the value(s)',font=('Helvetica',15,'underline'))
    L1.place(x=400,y=410)
    E1=Entry(fe)
    E1.place(x=400,y=450)
    E1.insert(0,0)
    E2=Entry(fe)
    E2.place(x=400,y=550)
    E2.insert(0,0)
    E3=Entry(fe)
    E3.place(x=400,y=650)
    E3.insert(0,0)
     
    L2=Label(fe,text='Contenu de matrice.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=320)
    with open("matrice.txt") as inf:
        lines = inf.readlines()
    L3=Label(fe,text=lines)
    L3.place(x=1000,y=350)
     
    L2=Label(fe,text='Contenu de matrice2.txt :',font=('Helvetica',15,'underline'))
    L2.place(x=1000,y=620)
    L4=Label(fe,text='')
    L4.place(x=1000,y=650)
     
    B=Button(fe,text='OK',width=25,command=ok)
    B.place(x=600,y=550)
     
    L5=Label(fe,text='Voulez-vous arrondir ? Si oui, mettez le nombre de chiffres après la virgule que vous souhaitez faire apparaître :')
    L5.place(x=0,y=320)
    E4=Entry(fe)
    E4.place(x=600,y=320)
     
    fe.mainloop()

  10. #10
    Invité
    Invité(e)
    Par défaut
    Faites un test simple dans IDLE, l'éditeur de texte brut intégré de Python : http://fr.wikipedia.org/wiki/IDLE_(Python)

    dans la console IDLE tapez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> a = 2 + 1.5464654
    >>> round(a, 4)
    3.5465
    >>> round(a, 3)
    3.546
    Si vous n'obtenez pas ces résultats, c'est que le problème vient des approximations de calcul de Python2.6

    Si vous en avez la possibilité, migrez vers Python2.7 : https://www.python.org/downloads/

    Ce sera tout bénéf' pour vous.

    @+.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    J'ai obtenu la même chose que vous dans la console IDLE...

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Ah en fait j'ai lancé mon programme dans l'idle 2.7.8 et ça fonctionne !
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 20/09/2019, 22h36
  2. Réponses: 3
    Dernier message: 26/04/2010, 15h42
  3. données d'une feuille à mettre dans une liste déroulante
    Par vinc44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/02/2010, 20h06
  4. [HTML 4.0] Limiter le nombre d'élements visibles dans une liste déroulante
    Par m.zouabi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/09/2009, 09h34
  5. scanner des dossiers et les mettre dans une liste
    Par niklos0 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 08/09/2008, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo