Mesurer occurence

- - Dernière réponse : Whismeril
Messages postés
13986
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 novembre 2019
- 29 oct. 2019 à 08:55
Bonjour,
J'ai un probleme sur python, je souhaite créer un programme qui, par analyse fréquentielle, va compter la fréquence de chaque lettre dans un mot codé donné, puis qui va calculer la clé, et fini par décrypter le texte. La clé c'est le décalage (leur écart dans l'alphabet) entre la lettre 'e' et la lettre de la plus fréquente dans le mot.
Je ne peut pas utiliser de liste, c'est un exercice. De plus, il m'est recommandé d'utiliser une variable 'fréquence' qui serait 26 fois le chiffre zéro qui augmente de 1 en fonction des lettre présente.
exemple : le mot aabccc afficherai fréquence=2130000....
je ne sais pas si tout cela est très clair mais si vous avez la moindre idée, je prend toutes les suppositions.
Merci d'avance...
Afficher la suite 

2 réponses

0
Merci
Bonjour,

Je ne peut pas utiliser de liste, c'est un exercice. De plus, il m'est recommandé d'utiliser une variable 'fréquence' qui serait 26 fois le chiffre zéro qui augmente de 1 en fonction des lettre présente.

26 fois quelque chose et travailler dessus, c'est utiliser une liste ou éventuellement un dict, tu vas quand même pas te trimbaler 26 variables dans ton script.
vous etes sur quil n'y a aucun autre moyen ? en effet, moi aussi je me dis que 26 variables ca fait beaucoup...
il n'y a pas moyen de faire un substitut avec la variable frequence.
> UnMecRandom -
Bonjour.

Oui, c'est sûr, donc une liste de 26 éléments.

frequences = [0] * 26
, parcourir ta chaîne à l'aide d'une boucle for, récupérer la valeur ordinale du caractère.
ord(car)
, par ex. pour 'a', on obtient 97, donc pour obtenir l'indice correspondant à car dans la var fréquences, on fait
indice = ord(car) - 97
.

Voilà, tu peux déjà commencer en t'appuyant sur ça.
Commenter la réponse de khrug
Messages postés
13986
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 novembre 2019
417
0
Merci
Bonjour

26 fois le nombre 0 ne veut pas dire 26 variables, mais
‘00000000000000000000000000’

Quand tu rencontres un a, tu incrémentes le premier caractère.
Si c’est un e, alors c’est le 5ème caractère
Bonjour,

En pratique, c'est faisable, mais fastidieux, car il faut :
- Extraire le caractère de la chaîne
- le convertir en integer
- L'incrémenter
- Le convertir en string
- Avec des slices reconstruire une nouvelle chaîne pour y insérer le caractère modifié.
- De plus, cela engendrera des bugs, car si on dépasse 9, alors tout sera décalé de 1 à la suite, alors il faudrait en plus utiliser un séparateur de valeurs XD pour pallier cela.


Alors qu'avec une liste d'entiers, on a juste à incrémenter une valeur selon un indice.
Whismeril
Messages postés
13986
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 novembre 2019
417 -
Que ce soit fastidieux ne change rien au fait que
Je ne peut pas utiliser de liste, c'est un exercice. De plus, il m'est recommandé d'utiliser une variable 'fréquence' qui serait 26 fois le chiffre zéro qui augmente de 1 en fonction des lettre présente.


Si tu dépasses 9 rien ne t'empêche de passer à a, b ... z puis A, B.... Z

Mais bon vu que
la lettre de la plus fréquente dans le mot.
, il s'agirait d'un mot et pas d'un texte entier, y'a quand même assez peu de chance de dépasser 9
Commenter la réponse de Whismeril