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
Bonjour,
J'ai un problème concernant le création d'un programme basique en python
J'ai une phrase et je dois être capable d'afficher le pourcentage de chaque lettre de cette phrase.
J'ai déjà réalisé ça :

phrase=''Compte le nombre de chaque lettre dans cette phrase.'''

compteur=0

lettre=""

phrase=phrase.lower()

alphabet="abcdefghijklmnopqrstuvwxyz"

for k in range(25):
for lettre in phrase:
if lettre==alphabet[k]:

C'est à partir d'ici que je suis coincée car je n'arrive pas a stocker chaque lettre dans une variable je suis juste capable de compter le nombre de lettres dans la phrase avec un compteur :/

Si vous pouviez m'aider à me débloquer

Merci d'avance

1 réponse

quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
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é
0
Bonjour,
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 !
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344 > Typex
22 oct. 2017 à 14:21
l[k] correspond au k-ième élément de la liste l
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.
0
Typex > quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024
22 oct. 2017 à 14:40
Merci beaucoup ! Tout s'éclaire
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 ?
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
22 oct. 2017 à 15:17
Oui c'est tout à fait possible, il faut chercher quelle est la valeur maximale de la liste et surtout à quelle endroit de la liste se trouve cette valeur maximale.
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.
0