Problème comptage pourcentage de lettres en python
Fermé
Typex
-
22 oct. 2017 à 12:18
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 - 22 oct. 2017 à 15:17
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 - 22 oct. 2017 à 15:17
A voir également:
- Problème comptage pourcentage de lettres en python
- Citizen code python - Accueil - Outils
- \R python ✓ - Forum Python
- Barre de données excel pourcentage 100 ✓ - Forum Excel
- 100 € en lettres - Forum Réseaux sociaux
1 réponse
quent217
Messages postés
421
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
1 mars 2024
346
22 oct. 2017 à 12:59
22 oct. 2017 à 12:59
Bonjour,
premièrement il y a 26 lettres dans l'alphabet donc il faut écrire
for k in range(26):
(il ne faut pas oublier que range(n) va de 0 à n-1)
ensuite pour ton problème le plus simple est d'utiliser une liste
tu peux la créer en écrivant:
l=[0]*26
ça va te créer une liste de 26 entiers qui sont tous initialisés à 0
à partir de là tu peux modifier la variable correspondant à la lettre en faisant
l[k]+=1
j’espère t'avoir aidé
premièrement il y a 26 lettres dans l'alphabet donc il faut écrire
for k in range(26):
(il ne faut pas oublier que range(n) va de 0 à n-1)
ensuite pour ton problème le plus simple est d'utiliser une liste
tu peux la créer en écrivant:
l=[0]*26
ça va te créer une liste de 26 entiers qui sont tous initialisés à 0
à partir de là tu peux modifier la variable correspondant à la lettre en faisant
l[k]+=1
j’espère t'avoir aidé
22 oct. 2017 à 14:03
merci de ta réponse, je n'avais pas remarqué cette erreur je ne savais pas que range(n) allait de 0 à n-1 !
Étant novice je n'ai pas encore vu en détail les listes je ne comprends donc pas ce que veut dire l[k]+=1
Peux-tu m'éclairer là dessus ?
Sinon je viens d'essayer et ça fonctionne parfaitement !
22 oct. 2017 à 14:21
il est possible de regarder son contenu juste en faisant l[k] par exemple pour l'afficher :
print(l[k])
ou pour le modifier en faisant l[k]=n par exemple pour l'incrémenter :
l[k]=l[k]+1
Le += est un raccourci de python qui permet de faire une incrémentation de variable donc
variable+=n
veut dire la même chose que
variable=variable+n
la même syntaxe existe d'ailleurs pour les autres opérateurs par exemple
variable-=n
variable*=n
variable/=n
etc.
22 oct. 2017 à 14:40
Je dois aussi par la suite comme c'est un programme de décodage de code césar trouver le décalage grâce au pourcentage, pour ça il me faut trouver la lettre avec le plus grand pourcentage dans la liste.
Je cherche donc à exprimer la lettre avec le plus grand pourcentage
Est-il possible grâce à ma liste de donner la lettre avec la plus grande récurrence dans la phrase ?
22 oct. 2017 à 15:17
Le plus simple est probablement de faire une boucle qui va lire chaque élément de la liste pour trouver sa valeur maximale sans oublié d'enregistrer à quelle endroit est cette valeur.
Je pense que tu peux trouver comment faire, ce n'est pas très compliqué ;)
Sinon, il est possible de faire ça en une seule ligne grâce à la fonction max de python mais c'est un peu plus compliqué à comprendre :
lettreMax=max(range(26),key=lambda x:l[x])
Je vais essayer de t'expliquer ça le plus clairement possible :
la fonction max renvoi tout simplement la valeur maximale parmis tous les arguments que tu lui donne :
max(1,9,6,2)
#renvoi 9
ou la valeur maximale d'une liste
l=[1,9,6,2]
max(l)
#renvoi aussi 9
Le problème c'est que dans ton exemple si tu fais ça tu va obtenir le pourcentage maximal mais tu ne sauras pas a quelle lettre ça correspond. On utilise donc l'argument key de la fonction max qui est la fonction permettant de comparer les éléments.
def pourcentage(x):
global l #rend la liste l globale pour y accéder depuis la fonction
return(l[x])
lettreMax=max(range(26),key=pourcentage)
Dans cette exemple j'ai créer une fonction qui prends en paramètre l'indice d'une lettre et qui retourne le pourcentage associé grâce à la liste l. La fonction max va donc faire passer chaque élément de range(26) (c'est à dire tous les nombre de 0 à 25) dans la fonction pourcentage, puis va rechercher la valeur maximale parmis les valeurs obtenu (qui correspond au pourcentage maximale) et enfin elle va retourner le nombre entre 0 et 25 qui correspond à ce pourcentage maximale.
Pour finir, lambda permet de créer une fonction qui tient sur une ligne donc de la forme
def fonction(...):
return(...)
donc lambda x:l[x] associe à chaque nombre, la valeur de l associé. Cette fonction fais donc exactement la même chose que pourcentage.
Voilà, toute cette explication n'étais pas demandé mais je me suis dit que tu pourrais être intéressé par cette syntaxe qui est très utile
PS : j'ai dit que l contenait les pourcentages des lettre mais en réalité si tu ne l'as pas modifié, la liste l contient le nombre de récurrence de chaque lettre. Mais ça ne change absolument pas le résultat puisque c'est proportionnelle.