Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, faq, sources pour Python & Zope
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/08/2009, 22h44   #1
M.Dolly
 
Inscription : juillet 2009
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 15
Points : -2
Points : -2
Par défaut [Source] Analyser la fréquence d'occurence de caractères

Bonjours à tous,

Ce script définie une fonction qui permet d'analyser la fréquence d'occurrence des lettres contenues dans un fichier.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def analyseFrequence():
    fh = input("Entrer le nom du fichier : ")
    fh = fh + '.txt'
    files=open(fh,'r')
    data=files.read()
    files.close()
    data = data.lower()
 
    import string
    alphabet = string.ascii_lowercase
    resultat, compteur = [], 0
 
    for e,lettre in enumerate(alphabet):
        for i,element in enumerate(data):
            if data[i] == alphabet[e]:
                compteur += 1
        compteur = round((compteur / (len(data) - 1)) * 100, 2)
        resultat.append(compteur)
        compteur = 0
 
    for u,lettre in enumerate(alphabet):
        print("Pour le caractère ", alphabet[u], "on a ", resultat[u], "%")
Utile pour la cryptographie.
M.Dolly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2009, 08h24   #2
pacificator
Modérateur
 
Avatar de pacificator
 
Inscription : août 2006
Messages : 1 074
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : août 2006
Messages : 1 074
Points : 1 547
Points : 1 547
Bonjour et merci pour ta contribution,
Citation:
Code :
1
2
3
4
    for e,lettre in enumerate(alphabet):
        for i,element in enumerate(data):
            if data[i] == alphabet[e]:
                compteur += 1
pour chaque lettre de l'alphabet,, tu parcours tout le contenu du fichier et tu compares toutes les lettres pour les compter.

Il serait plus rapide de parcourir une seul fois le fichier et pour chaque lettre rencontrée d' incrementer son nombre d' occurences (dans un dictionnaire par exemple).

Et y a-t-il une raison pour limiter ton analyse aux lettres minuscules?
__________________
"Etre conscient de la difficulté permet de l'éviter.."
Lao-Tseu.
pacificator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2009, 14h07   #3
M.Dolly
 
Inscription : juillet 2009
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 15
Points : -2
Points : -2
En fait c'était pour faciliter le test de la fonction maintenant si quelqu'un veux rajouter des caractères c'est très simple puisqu'il suffit de rajouter un caractère dans la variable alphabet.

Pour l'histoire du comptage il me semble que prendre une lettre et de parcourir tout le fichier et plus rapide que de prendre la première lettre et de la comparer à l'alphabet -beaucoup moins efficace si il y a plusieurs fois la même lettre dans le fichier, ce qui est très très probable-.
M.Dolly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2009, 11h23   #4
pierjean
Membre confirmé
 
Inscription : mai 2003
Messages : 268
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 268
Points : 297
Points : 297
Bonjour,
Je pense que Pacificator a raison. Il me semble plus simple et rapide d'utiliser un dictionnaire :
Code :
1
2
3
compteur={}
for car in data :
    compteur[car]=compteur.get(car,0)+1
pierjean est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h09.


 
 
 
 
Partenaires

Hébergement Web