Mesurer occurence

Fermé
UnMecRandom - 28 oct. 2019 à 14:18
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 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...
A voir également:

2 réponses

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.
0
UnMecRandom
28 oct. 2019 à 20:24
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.
0
khrug > UnMecRandom
29 oct. 2019 à 08:40
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.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
28 oct. 2019 à 23:56
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
0
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.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
29 oct. 2019 à 08:55
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
0