Programme pour compter les lettres d'un mot

Bonjour,

J’essaye de créer un petit programme qui permet de printer le nombre de fois que chaque lettre du mot choisi apparait
Exemple :
Entrez un mot : anana
La lettre a apparait 3 fois
La lettre n apparait 2 fois

Voici mon programme assez lourd :

from collections import defaultdict

mot =(input("Entrez un nouveau mot: "))

chars = defaultdict(int)

for char in mot:

chars[char] += 1

print("la lettre a apparait",chars["a"],"fois")

print("la lettre b apparait",chars["b"],"fois")

print("la lettre c apparait",chars["c"],"fois") # element not present in the string, hence print 0

print("la lettre d apparait",chars["d"],"fois")

print("la lettre e apparait",chars["e"],"fois")

print("la lettre f apparait",chars["f"],"fois")

print("la lettre g apparait",chars["g"],"fois")

print("la lettre h apparait",chars["h"],"fois")

print("la lettre i apparait",chars["i"],"fois")

print("la lettre j apparait",chars["j"],"fois")

Merci de m’aider :wink:

Tu peux regarder au niveau de Counter. Ça semble bien indiqué dans ton cas.

+1 pour utiliser Counter qui est d’ailleurs très semblable à defaultdict(int).

Ensuite pour améliorer ton programme il faut regarder à quel endroit ton ordinateur t’a fait travailler. Ton jeu c’est de faire travailler ton ordinateur (son jeu c’est de te faire bosser à sa place).

Là où ton ordinateur t’a fait travailler c’est la longue série de print. Tu ne devrais avoir à l’écrire qu’une fois, et laisser ton ordinateur bosser, par exemple en utilisant le mot clé for.

D’ailleurs en français aussi on utilise aussi ce genre de structure, tu ne me demanderas pas « dis-moi combien de a il y a dans le mot, dis-moi combien de b il y a dans le mot dis-moi combien de c il y a dans le mot, … » mais plutôt quelque chose comme « pour chaque lettre, dis-moi combien de fois tu vois la lettre dans le mot ».

1 « J'aime »

Bonjour,
Counter semble en effet une bibliothèque très adaptée.
Je me permet de proposer une solution plus manuelle, mais plus “pédagogique” afin de mieux comprendre certains mécanismes.
Ce que dit @mdk est effectivement d’une part de se calquer sur le langage naturel pour savoir ce que vous voulez obtenir, mais surtout de limiter les répétitions de code et faire travailler python plutôt que le développeur.
La méthode que je propose est bien sûr plus verbeuse que counter mais je crois qu’elle permet de comprendre ces notions.
Il faut comprendre les dictionnaires et les string.
un string est un iterable, ça veut dire que python sait itérer sur chaque caractère. il suffit donc de les placer les un après les autre comme clé d’un dictionnaire, puis de les compter:

index = {} # j'initialise un dictionnaire
mot = "ananas" # je défini mon mot
for lettre in mot: # j'itère sur chaque lettre composant le mot. 
    if lettre in index.keys(): # je teste l’existence de la lettre parmi les clés du dictionnaire
        index[lettre] += 1 # si elle existe j'ajoute 1 à sa valeur
    else:
        index[lettre] = 1 # sinon je la crée avec une valeur de 1
# la boucle est fini, j'affiche mon dictionnaire en itérant sur ses paires clé/valeur (lettre/compte)
for lettre, count in index.items():
    print(f"la lettre '{lettre}' apparaît {count} fois dans le mot {mot}")

Ce type d’approche ma permis à un moment de mieux comprendre certains mécanismes de python (de la programmation en général en fait).

Mais bien sûr une fois compris il est surement préférable de faire appel à des bibliothèques qui font déjà tout le travail.
Fabrice.

1 « J'aime »

Coucou, je rebondis sur ton code. Si on connait bien les dictionnaires, on peut écrire :

index[lettre] = index.get(lettre, 0) + 1

Qui me semble être à la fois compréhensible, mais aussi tirer avantage du get des dictionnaires :wink:

3 « J'aime »

Absolument!