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

Python Discussion :

Transformer une liste de caractères en nombre


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Par défaut Transformer une liste de caractères en nombre
    Voilà,
    je m'explique je pète un câble.
    Je suis occupé depuis je sais pas cb d'heure à esseyer de résoudre ce pb.
    Alors voilà,
    je dois à partir d'un fichier texte rempli de nombre réels les lire, les transformer en nombre arrondi.
    J'ai réussi à les lire mais ils sont transformés en liste de liste. Donc chaque nombre est dans une liste et tous les chiffres sont sous forme de caractères
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [['1', '4', '.', '8', '9', '6'], ['7', '8', '9', '4', '.', '6'], ['1', '2', '3', '.', '2', '7', '8'], ['4', '5', '8', '7', '.', '3', '2'], ['2', '.', '2', '3', '6', '9'], ['2', '3', '6', '9', '8', '5', '.', '3', '6', '5', '4', '7', '8'], ['1', '2', '.', '2', '1', '0', '2', '0', '0', '0', '0', '9']]
    Mais pour les arrondir vous aurez deviné qu'ils doivent être sous la forme de nombre.
    Comment faire?

    PS: mon programme en entier. Vous verrez que j'ai réussi à transformer les caractères chiffres en chiffre mais ils sont toujours séparés et puis la méthode est affreuse!!!
    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
    #SE11-7
    #Vous avez à votre disposition un fichier texte dont chaque ligne est la représentation
    #d'une valeur numérique de type réel (mais sans exposants).
    #Ecrivez un ppq qui recopie ces valeurs dans un autre fichier en les arrondissant
    #en nombres entiers (l'arrondi doit être correct).
     
    Fichier=open('numeros.txt','r')
     
    contenu=Fichier.read()
    liste_a=[]
     
    for caractere in contenu:
        liste_a.append(caractere)
     
    liste_numeros=[]
    liste_intermediaire=[]
     
    for i in liste_a:
     
        if i != "\n":
            liste_intermediaire.append(i)
        else:
     
            liste_numeros.append(liste_intermediaire)
            liste_intermediaire=[]
     
    print liste_numeros
    Fichier.close()
     
    nombre_intermediaire=[]
    liste_final=[]
    for nombre in liste_numeros:
        for chiffre in nombre:
            if chiffre == "9":
                chiffre_final=9
            if chiffre == "8":
                chiffre_final=8
            if chiffre == "7":
                chiffre_final=7
            if chiffre == "6":
                chiffre_final=6
            if chiffre == "5":
                chiffre_final=5
            if chiffre == "4":
                chiffre_final=4
            if chiffre == "3":
                chiffre_final=3
            if chiffre == "2":
                chiffre_final=2
            if chiffre == "1":
                chiffre_final=1
            if chiffre == "0":
                chiffre_final=0
            if chiffre == ".":
                chiffre_final="."
            nombre_intermediaire.append(chiffre_final)
        liste_final.append(nombre_intermediaire)
        nombre_intermediaire=[]
    print liste_final

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà une solution concise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    L=[['1', '4', '.', '8', '9', '6'], ['7', '8', '9', '4', '.', '6'], ['1', '2', '3', '.', '2', '7', '8'], ['4', '5', '8', '7', '.', '3', '2'], ['2', '.', '2', '3', '6', '9'], ['2', '3', '6', '9', '8', '5', '.', '3', '6', '5', '4', '7', '8'], ['1', '2', '.', '2', '1', '0', '2', '0', '0', '0', '0', '9']]
     
    R=["".join(x) for x in L]  # affiche: ['14.896', '7894.6', '123.278', '4587.32', '2.2369', '236985.365478', '12.210200009']
     
    R=["%.2f" % float(x) for x in R]  # affiche avec arrondis à 2 chiffres après la virgule: ['14.90', '7894.60', '123.28', '4587.32', '2.24', '236985.37', '12.21']
    Où, en une seule ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    R=["%.2f" % float("".join(x)) for x in L]  # affiche: ['14.90', '7894.60', '123.28', '4587.32', '2.24', '236985.37', '12.21']
    Les éléments clés utilisés:
    - la méthode "".join()
    - les "lists compréhension"
    - l'affichage formatée avec "%"

    Tyrtamos

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Par défaut
    c'est bizarre mais quand je remplace le L par liste_final qui est la même liste que L ça ne marche pas

    Edit: je suis un boulet!!

    merci pour l'aide

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/12/2009, 20h11
  2. transformer une liste en chaine de caractères
    Par fboss dans le forum Général Python
    Réponses: 8
    Dernier message: 24/11/2009, 19h07
  3. Réponses: 2
    Dernier message: 26/11/2005, 13h44
  4. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  5. Réponses: 2
    Dernier message: 14/01/2005, 15h40

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