Date de publication :
Introduction
À quoi peut bien servir une fonction qui compte le nombre de mots dans une phrase ?
C’est la question que je me suis posé quand j’ai fait cet exercice. Je n’ai pas la réponse mais je la trouverai peut être au cours de mon parcours.
Dans cet article je vais te montrer commentcréer une fonction Python pour compter les mots d’une phrase, en utilisant une boucle for et la méthode split().
Sommaire
La mission du jour :
Voici la mission que j’ai reçue du quartier général aujourd’hui :
« Crée une fonction qui compte le nombre de mots dans une phrase. »
Trouver l’erreur : pourquoi ma première solution ne fonctionnait pas
Quand j’ai lu l’énoncé de la mission je me suis dit « easy, je sais comment faire ».
Cela m’a pris environ 5 min pour écrire la première solution que voici :
def count_words(sentence):
n_words = 0
for i in sentence:
n_words += 1
return n_words
if __name__ == "__main__":
sentence = input("Entrer la phrase à compter : ")
print(count_words(sentence))
Mais comme tu dois t’en douter, si ce code est dans cette section c’est que ce n’est pas la bonne réponse.
Pourquoi ? Trouve l’erreur.
Trouvé ?
L’erreur est que l’énoncé demande à ce qu’on compte le nombre de mots. Cependant, cette fonction compte le nombre de lettres.
Regarde ce qui se passe quand on parcourt la phrase caractère par caractère :
sentence = "hello world"
for i in sentence:
print(i)
# h
# e
# l
# l
# o
#
# w
# o
# r
# l
# d
En Python, itérer sur une string avec une boucle for parcourt chaque caractère, pas chaque mot.
Sur « hello world », le code retourne 11 au lieu de 2.
Je n’ai pas pris le temps de comprendre la demande et je me suis précipité sur le code.
La leçon : toujours réfléchir avant de se précipiter sur le code
Comment compter les mots en Python avec .split()
La méthode .split() en Python permet de diviser une chaîne de caractères en sous-chaînes grâce à un séparateur.
Le séparateur est en quelque sorte le signal qui dit à Python : « il faut séparer ici ».
Exemples :
# Séparer la phrase à chaque virgule
"hello,world".split(",") # ['hello', 'world']
# Séparer la phrase à chaque tiret
"hello-world".split("-") # ['hello', 'world']
Si le séparateur n’est pas défini, Python utilisera chaque espace comme séparateur par défaut.
Et c’est ce qui nous intéresse ici.
La solution du compteur de mot:
def count_words(sentence):
n_words = 0
for word in sentence.split(): # on parcourt chaque mot un par un
n_words += 1
return n_words
if __name__ == "__main__":
sentence = input("Entrer la phrase à compter : ")
print(count_words(sentence))
Version courte : compter les mots en Python avec len() et split()
Avant de te montrer le code, voici ce qui se passe en deux étapes :
sentence = "hello world"
# Etape 1 — split() divise la phrase en liste de mots
print(sentence.split())
# ['hello', 'world']
# Etape 2 — len() compte les éléments de cette liste
print(len(['hello', 'world']))
# 2
# Ce qui donne combiné :
print(len(sentence.split()))
# 2
Ce sont deux étapes logiques enchaînées.
Ce qui donne ce code très court :
def count_words(sentence):
return len(sentence.split())
if __name__ == "__main__":
sentence = input("Entrer la phrase à compter : ")
print(count_words(sentence))
Conclusion
Voilà, tu sais maintenant comment compter le nombre de mots dans une phrase en Python. Prends bien le temps de comprendre ce qu’on attend de ton code avant de te lancer dedans.
Et si tu trouves à quoi ça sert de compter des mots, fais moi signe.