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 :

Fonctionr sort() ne fonctionne pas ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut Fonctionr sort() ne fonctionne pas ?
    Bonjour à tous,

    Je ne comprend pas pourquoi cela ne fonctionne pas ?
    Je lis un fichier txt contenant une série de prénoms (format str).
    J'ajoute les lignes dans une liste.
    Et, enfin, j'essaie de trier la liste avec la fonction liste.sort()...
    Quand j'affiche la liste pour vérifier je constate que la liste n'es pas triée... et je ne comprend pas pourquoi cela ne fonctionne pas !

    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
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    #
    # Problem 22 - Project Euler
    #
    # Using names.txt (right click and 'Save Link/Target As...'),
    # a 46K text file containing over five-thousand first names, begin by
    # sorting it into alphabetical order. Then working out the alphabetical
    # value for each name, multiply this value by its alphabetical position
    # in the list to obtain a name score.
    #
    # For example, when the list is sorted into alphabetical order,
    # COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name
    # in the list. So, COLIN would obtain a score of 938 × 53 = 49714.
    #
    # What is the total of all the name scores in the file?
    #
    import time
     
    def exo_22_project_Euler(fichier_txt):
     
        a = []
     
        f = open(fichier_txt, 'r')
        for ligne in f:
            a.append(ligne)
        f.close()
     
        a.sort()
     
        return a
     
    def main():
        s = time.time()
     
        print exo_22_project_Euler('names.txt')
     
        e = time.time()-s
        print "\nRésultat fourni en %f secondes." % (e)
     
        return 0
     
    if __name__ == '__main__': main()
    En vous remerciant d'avance,
    a+
    EricStib

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Est-ce qu'il y a bien plusieurs lignes dans ton fichier_txt ?
    Si a ne contient qu'un élément quand tu lui appliques sort() ........

    Donnes nous un aperçu du contenu de fichier_txt, stp, obtenu en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    f = open(fichier_txt, 'r')
    u = f.readlines()
    f.close()
    print u
    Donne nous aussi l'affichage de la liste que tu obtiens en résultat stp.

    PS: un essai de ton code sur un fichier de plusieurs lignes contenant un mot par ligne m'a affiché une liste qui est bien triée

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut
    Bonjour,

    Le fichier texte se trouve ici: http://projecteuler.net/project/names.txt
    Il ne contient qu'une seule ligne mais puisque je le met dans une liste, pourquoi la fonction sort() ne fonctionne pas ?

    J'ai mis l'écran obtenu en file attach, je ne savais pas comment le faire apparaitre ici.

    a+
    Images attachées Images attachées  

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut
    J'ai trouvé quelque chose avec les expressions régulières (tirés d'en livre)... cela à l'air de scinder ma ligne en mot mais je ne comprend pas encore comment cela fonctionne et je ne sais pas si je suis vraiment tiré d'affaire pour mon algo mais, en utilisant le code ci-dessous, j'arrive à trier ma liste !!

    Maintenant, je vais essayer de comprendre le code du bouquin car je ne connais encore rien sur les expressions régulières

    Encore merci et a+,

    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
     
    import re
     
    def exo_22_project_Euler(fichier_txt):
        alphabet = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5, 'F':6, 'G':7, 'H':8,
                    'I':9, 'J':10, 'K':11, 'L':12, 'M':13, 'N':14, 'O':15,
                    'P':16, 'Q':17, 'R':18, 'S':19, 'T':20, 'U':21,
                    'V':22, 'W':23, 'X':24, 'Y':25, 'Z':26}
     
        a = []
        position = 1
        total = 0
        re_mot = re.compile(r'[\w"-]+')
     
        f = open(fichier_txt, 'r')
        for ligne in f:
            for mot in re_mot.finditer(ligne):
                a.append(mot.group(0))
        f.close()
     
        a.sort()

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Puisque le fichier ne contient qu'une seule ligne,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            for ligne in f:
                a.append(ligne)
    ne travaille qu'une fois.
    En sortie de "boucle", a ne contient qu'un élément qui est une chaine de caractères.
    Nous, nous voyons des mots dans cette chaine, entourés de " " et séparés par des virgules. Mais ces éléments-mots de la chaine n'existent pas pour sort(): elle ne cherche qu'à trier les éléments de la liste a... et il n'y en a qu'un.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Les expressions régulières sont un sujet très intéressant, un vrai régal, mais elles sont inutiles pour ce niveau de problème.
    Ce que nous identifions comme mots dans la chaine de caractères ont le bon goût d'être séparés par des virgules et entourés de " ". En fait , il faut se dire que les mots sont séparés par des chaines de 3 caractères "," , ce sera plus parlant pour un programme. Et il faut chercher une liste qui découpe une chaine en fonction d'un séparateur. Il faut regarder ici:
    http://www.python.org/doc/2.5/lib/ge....html#letter-s
    à string,
    methods
    Une page à bien connaître à mon avis.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Par défaut
    moi je sais, moi je sais!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fch=open("fichier","r")
    fichier=fch.readlines()
    fch.close()
    fichier.replace("'","")
    fichier.split(',')
    for i in fichier:
     print i
    j'ai bon ?

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

Discussions similaires

  1. Quick Sort ne fonctionne pas
    Par thierryler dans le forum Collection et Stream
    Réponses: 42
    Dernier message: 31/07/2014, 14h38
  2. sort by ne fonctionne pas avec des subtables
    Par ekremyilmaz dans le forum JSF
    Réponses: 1
    Dernier message: 27/07/2010, 13h17
  3. Collections.sort ne fonctionne pas
    Par lex13 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 12/07/2007, 11h13
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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