Dm info python - Page 3
Répondre à la discussion
Page 3 sur 4 PremièrePremière 3 DernièreDernière
Affichage des résultats 61 à 90 sur 104

Dm info python



  1. #61
    invite4c80defd

    Re : Dm info python


    ------

    nous sommes d'accord: il faut identifier les fichiers ".txt"
    (liste_fichier est de type liste de chaines de caractères : liste des noms de fichiers à regarder: pour préciser))

    -----

  2. #62
    Dlzlogic

    Re : Dm info python

    Je connais pas Python.
    Ecrivez l'algorithme (en français) qui détaille votre affirmation "il faut identifier les fichiers '.txt'".

  3. #63
    invite43901482

    Re : Dm info python

    Il y a des fonctions spécifiques au fichier avec le module os.path, je vous laisse lire la doc

  4. #64
    invite4c80defd

    Re : Dm info python

    Je viens d'y jeté un coup d’œil, merci. Mais je suis censé pouvoir le faire sans fonctions prédéfinies (ou plutôt, si j'étais en contrôle, je n'y aurais pas accès).

  5. #65
    Dlzlogic

    Re : Dm info python

    @ Isis-mika
    Vous n'avez pas accès à la doc, ou pas accès au fonctions de Python.
    Dans le premier cas, il faut faire un sérieux effort de mémoire, dans le second cas, on vous demande de savoir réécrire la gestion de l'OS, ça me parait surprenant.
    Je parie que ces fonctions s'appellent "findfirst()", "findnext()".

  6. #66
    invite4c80defd

    Re : Dm info python

    en contrôle, nous n'avons pour seul outil que notre tête!
    Vu que je ne connais pas toutes ces procédures et que je n'ai pas accès à la doc, je suis censé me débrouiller tout seul...
    heureusement, vous êtes là..

  7. #67
    Dlzlogic

    Re : Dm info python

    Bon, alors, écrivez l'algorithme.
    Apparemment, en contrôle, vous n'avez pas de machine, donc rien ne vous empêche d'écrire
    "f_truc_machin() est une fonction qui fait ça".
    On en est revenu à la question de départ, et on n'a pas beaucoup avancé.

  8. #68
    invite43901482

    Re : Dm info python

    je viens de voir que dans mon exo, a la question suivante, une fonction compte le nombre de chacune des lettres dans une liste de fichiers et cette fonction prend en argument :
    La question est claire, tu as une fonction prenant en argument un fichier, on te demande de le faire pour plusieurs fichiers dans une liste, faut arrêter la fumette, c'est quand même pas dur de poser une p... de boucle dans une fonction, non?

    Code:
    def p...de fonction(p...deliste):
        for fichier in p...deliste:
            fonction_precedente(fichier)


    Le tri des extensions TXT ça doit être pour la suite, voir peut-être même pas...

  9. #69
    invite4c80defd

    Re : Dm info python

    p....deliste ? qu'est ce que c'est ? (moi je mettrais le nom de la liste non ?)

    Je suis bien d'accord avec votre fonction mais je cherchais comment remplir cette liste, quels fichiers y mettre (sans créer la liste avec le nom de chacun des fichiers que j'aurais inscrits dedans)

  10. #70
    invite43901482

    Re : Dm info python

    Réfléchissez un peu, on demande une liste en paramètre

    p....deliste ? qu'est ce que c'est ? (moi je mettrais le nom de la liste non ?)
    Faut rester calme avec vous...

  11. #71
    invite4c80defd

    Re : Dm info python

    certes..
    Toutefois, le probleme est plus long que l'on ne veut bien le croire.
    En effet, il faut à la fin avoir une seule liste qui contient toutes les lettres rencontrées et non pas autant de listes que de fichiers..

  12. #72
    Dlzlogic

    Re : Dm info python

    Citation Envoyé par Isis-mirka Voir le message
    certes..
    Toutefois, le probleme est plus long que l'on ne veut bien le croire.
    En effet, il faut à la fin avoir une seule liste qui contient toutes les lettres rencontrées et non pas autant de listes que de fichiers..
    C'est amusant, à vous lire, on dirait que c'est vous qui nous apprenez l'informatique.

  13. #73
    invite4c80defd

    Re : Dm info python

    désolé si ça donne cette impression , ça n'était pas mon intention.

  14. #74
    invite4c80defd

    Re : Dm info python

    Voila ce que j'ai fait:
    Code:
    def lettres_fichiers(liste_fichiers):
        liste_finale=[]
        for fichier in liste_fichiers:
            liste_finale=lettres_3(fichier)
    sachant que j'ai:
    Code:
    def lettres_3(fichier):
        liste = []
        f=open(fichier,"r")
        for line in f:
            for char in line:
                 if char.isalpha() and char not in liste:
                     char=char.lower()
                     char=table(char)
                     liste.append(char)
                     
        f.close()
        return liste
    A chaque tour de boucle, liste_finale "vaut" la liste des lettres cherchées. Seulement, je voudrais pouvoir conserver ces listes et les imbriquer de telle manière que si la lettre "a" apparaît dans deux listes, je ne puisse l'avoir qu'une seule, mais je n'arrive pas à le faire (j'ai meme fais bugger python à un moment..)

    Merci pour votre aide

  15. #75
    invite43901482

    Re : Dm info python

    Que voulez vous faire avec liste_finale=[] ?

    Pourquoi ne retournez vous rien dans votre fonction lettres_fichiers?

    Avez-vous testé?

    Seulement, je voudrais pouvoir conserver ces listes et les imbriquer de telle manière que si la lettre "a" apparaît dans deux listes, je ne puisse l'avoir qu'une seule, mais je n'arrive pas à le faire (j'ai meme fais bugger python à un moment..)
    Rassembler toutes vos listes, et faites une fonction de type ensemble (fonction set en python)

    Code:
    >>> set(["a", "b", "c", "a", "u", "p", "b"])
    {'a', 'p', 'c', 'b', 'u'}

  16. #76
    invite4c80defd

    Re : Dm info python

    mais justement c'est rassembler les listes qui est compliqué pour moi car à chaque nouveau tour de boucle, la liste (que liste_finale prend comme valeur) "s'efface" pour prendre en valeur la suivante (comme on est dans une boucle). De plus, moi je ne voudrais pas rassembler les lettres d'une même liste (je me suis mal exprimé) mais rassembler les lettres de toutes les listes.

    ex:
    ['a', 'c', 'd', 'e', 'f', 'g']
    ['a', 'b', 'd', 'e', 'h', 'g', 's', 'v']

    me donnerait: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 's', 'v']

  17. #77
    invite43901482

    Re : Dm info python

    j'avais bien compris, mais pas vous apparemment.

  18. #78
    invite4c80defd

    Re : Dm info python

    voila ce que j'ai essayé de faire :

    Code:
    def lettres_fichiers2(liste_fichiers):
        liste_finale=[0]*len(liste_fichiers)
        for fichier in range(len(liste_fichiers)):
            liste_finale=liste_finale+lettres_3(fichier)
        return(liste_finale)
    avec cette fonction je devrais obtenir toutes les lettres rencontrées (vaudrait alors aplliquées set() comme vous le disiez)

    mais une erreur se produit lors de l'execution de lettres_3(fichier) lors de la ligne "f=open(fichier,"r")" alors que cette fonction marceh bien lorsqu'elle utilisée seule ,qu'en pensez-vous ?

    la voici:
    Code:
    def lettres_3(fichier):
        liste = []
        f=open(fichier,"r")
        for line in f:
            for char in line:
                 if char.isalpha() and char not in liste:
                     char=char.lower()
                     char=table(char)
                     liste.append(char)
                     
        f.close()
        return liste
    avec

    Code:
    def table(lettre):
        
        for cle in correspondance:
            if lettre in cle:   
                return correspondance[cle]
        return lettre

  19. #79
    invite43901482

    Re : Dm info python

    Avez-vous mis un print pour voir la tête de votre liste_finale (à la place de return, je préfère préciser ) ?

    Copier la sur le forum, pour qu'on puisse voir si le résultat est déjà correct.

  20. #80
    invite4c80defd

    Re : Dm info python

    j'ai essayé avec 3 fichiers txt que j'ai :
    liste_fichiers=["test.txt","test2.txt","test3. txt"]
    Code:
    def lettres_fichiers2(liste_fichiers):
        liste_finale=[]
        for fichier in liste_fichiers:
            liste_finale=lettres_3(fichier)
        print(liste_finale)
    voila la réponse:

    Code:
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        lettres_fichiers2(liste_fichiers)
      File "E:\info 224\tp2.essai3.py", line 86, in lettres_fichiers2
        liste_finale=liste_finale+lettres_3(fichier)
      File "E:\info 224\tp2.essai3.py", line 18, in lettres_3
        f=open(fichier,"r")
    OSError: [Errno 9] Bad file descriptor

  21. #81
    invite4c80defd

    Re : Dm info python

    désolé , j'ai fais un mauvais copié-collé: ne considérez pas la premiere fonction de mon dernier message , c'est une erreur (j'ai en fait repris la premiere du message #78 en remplaant le return par un print()

  22. #82
    invite43901482

    Re : Dm info python

    Avant de travailler avec les fichiers travaillez avec les listes, à l'interpréteur si je simule ce que vous avez fait

    Code:
    >>> liste_finale = [0] * 5
    >>> liste_finale
    [0, 0, 0, 0, 0]
    >>> liste_finale + ["a", "b"]
    [0, 0, 0, 0, 0, 'a', 'b']
    On voit bien que ce n'est pas la solution, vos 0 n'ont rien à faire là...

    Pour ajouter une liste à une liste, on utilise la méthode append, vous l'avez déjà vu!

    Code:
    >>> liste_finale = []
    >>> liste_finale.append(["a", "b"])
    >>> liste_finale
    [['a', 'b']]
    >>> liste_finale.append(["c", "b"])
    >>> liste_finale
    [['a', 'b'], ['c', 'b']]
    Ensuite c'est simple de récupérer toutes les lettres dans une liste que je nomme result par exemple

    Code:
    >>> for liste in liste_finale:
    ...     for char in liste:
    ...         result.append(char)
    ... 
    >>> result
    ['a', 'b', 'c', 'b']
    Puis de faire un set

    Code:
    >>> set(result)
    {'a', 'c', 'b'}

  23. #83
    invite4c80defd

    Re : Dm info python

    ok merci je vais essayer vous redirais si j'y arrive

  24. #84
    invite4c80defd

    Re : Dm info python

    J'y suis arrivé , merci.
    J'ai encore une question sur laquelle je loque :
    "essayez de faire une analyse sur les bigrammes (couples de lettres).
    bigrammes les plus fréquents:

    es : 3.15%
    le : 2.46%
    en : 2.42%
    de : 2.15%
    re : 2.09%
    nt : 1.97%
    on : 1.64%
    te : 1.63%
    er : 1.63%
    se : 1.55%

    Écrivez la fonction frequences_bigramme correspondante :

    Code:
    def frequence_bigrammes(liste_fichiers):
        """calcule la frequence des bigrammes dans les fichiers donnés en argument.
    
    paramètre : liste_fichiers, de type liste de chaines de caractères : liste des
    noms de fichier qu'il faudra utiliser pour l'analyse
    
    valeur de retour : dictionnaire où les clés sont des caractères, et les valeurs
    sont leurs fréquences d'apparition.
    """
    avant , on étuidait les caracteres un par un mais la , comment identifier certaines lettres, et qui plus est, des couples de lettres
    je voulais tester au début si la lettre testée était l'une des bigrammes ci-dessus ( celle des gauche) et rajouter une condition pour la lettre suivante mais je n'y arrive pas , auriez-vous une idée ?

    Merci beaucoup

  25. #85
    Dlzlogic

    Re : Dm info python

    Bonjour,
    il y a plusieurs méthodes pour faire ça. Voici la méthode de hachage, la plus élégante à mon avis et certainement la plus rapide.
    Voici comment ça marche pour 2 lettres.
    On appelle L1 et L2 deux lettres successives
    Code:
    Suivant la lettre L1
       c'est un a:
          suivant la lettre L2
            c'est un e:
               on incrémente le compteur ae et on sort
            c'est un f:
               on incrémente le compteur af et on sort
            etc.
          fin de test sur L2
        on sort
       c'est un n: 
          suivant la lettre L2
            c'est un e:
               on incrémente le compteur ne et on sort
            c'est un s:
               on incrémente le compteur af et on sort
            etc.
          fin de test sur L2
        on sort
        etc.
    fin de test L1
    Il n'y a pas un seul if. Le mot-clé utilisé généralement est switch(L) et pour chaque cas; case 'e':
    Il y a plusieurs avantages à cette méthode, bien qu'elle paraisse prendre beaucoup de place (nombre de lignes) elle est très rapide en exécution, et il est très facile de rajouter des cas nouveaux, et de se vérifier.

  26. #86
    invite43901482

    Re : Dm info python

    Comme Dlzlogic, je choisirais la méthode de hachage, dans le cas de python, on utilise les dictionnaires

    On pourra utiliser la méthode count des chaînes de caractères pour compter le nombre de bigrammes.

    Code:
    >>> liste = ["espagne", "esquimau", "tes"]
    >>> for string in liste:
    ...     string.count("es")
    ... 
    1
    1
    1

  27. #87
    invite4c80defd

    Re : Dm info python

    ok, je vais essayer avec de cette façon, merci
    (merci a Dzlogic pour sa technique qui était tes claire aussi , mais plus longue)

  28. #88
    invite43901482

    Re : Dm info python

    N'oublie pas d'initialiser le nombre de bigrames à 0 dans ton dictionnaire, c'est ton compteur de bigrames

    Code:
    >>> bigrames = ["es", "le", "en", "de", "re", "nt", "on", "te", "er", "se"]
    >>> dico = {}
    >>> dico.fromkeys(bigrames, 0)
    {'on': 0, 'le': 0, 'de': 0, 're': 0, 'en': 0, 'se': 0, 'te': 0, 'nt': 0, 'es': 0, 'er': 0}

  29. #89
    invite4c80defd

    Re : Dm info python

    je voulais commencer comme ceci:

    Code:
    def frequence_bigrammes(liste_fichiers):
        for fichier in liste_fichiers:
            f=open(fichier,"r")
            liste=f.readlines()
            for couple in liste:
                couple.count("es")
    mais je me rend compte que ça ne va pas..

  30. #90
    invite4c80defd

    Re : Dm info python

    voila ce que j'aurais voulu commencer , m'ais c'est tres long et peu probable que ce soit correct:
    Code:
    def frequence_bigrammes(liste_fichiers):
        bigrames = ["es", "le", "en", "de", "re", "nt", "on", "te", "er", "se"]
        dico = {}
        dico.fromkeys(bigrames, 0)
        {'on': 0, 'le': 0, 'de': 0, 're': 0,'en': 0,
         'se': 0, 'te': 0, 'nt': 0, 'es': 0, 'er': 0}
        for fichier in liste_fichiers:
            f=open(fichier,"r")
            liste=f.readlines()
            for i in range(len(liste)):
                if liste[i]==biogrames[0]:
                    dico[biogrames[0]]=dico.fromkeys(biogrames,1)
                if liste[i]==biogrames[1]:
                    #....jusqu'à  biogrames[9]
    qu'en pensez-vous ?

Page 3 sur 4 PremièrePremière 3 DernièreDernière

Discussions similaires

  1. Python
    Par invitee851a923 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 10/12/2012, 05h25
  2. Besoin d'avis Master info ou bio-info ??? je suis perdue
    Par invitece52300a dans le forum Orientation après le BAC
    Réponses: 2
    Dernier message: 26/02/2012, 10h01
  3. Transformer une info LED en info négative ?
    Par invite6f3e0bd5 dans le forum Électronique
    Réponses: 2
    Dernier message: 18/09/2009, 22h56
  4. Python
    Par invite3e3c726d dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 13/03/2009, 11h55
  5. Licence Math-info >> DUT info
    Par invitedcc7860a dans le forum Orientation après le BAC
    Réponses: 5
    Dernier message: 10/02/2009, 15h24