NSI (première) · Chapitre 3 · Exercice de TD
Voici une fonction censée compter les voyelles d'une chaîne
Langages et programmation · Mettre au point : construire un jeu de tests · niveau 3 (difficile)
Énoncé
Voici une fonction censée compter les voyelles d'une chaîne :
def compte_voyelles(s):
n = 0
for c in s:
if c in "aeiou":
n = n + 1
return n
Elle passe le test compte_voyelles("bonjour") == 3. Trouver deux défauts distincts, construire pour chacun le cas de test le plus court qui le révèle, puis corriger. Que retient-on sur la manière dont ce jeu de tests initial a été choisi ?
Corrigé
Défaut 1 : les majuscules. compte_voyelles("Oui") rend au lieu de — le O majuscule n'est pas dans la chaîne "aeiou". Cas de test le plus court qui le révèle : "A", attendu , obtenu .
Défaut 2 : le y. En français, y est une voyelle. compte_voyelles("rythme") rend (le e) au lieu de . Cas le plus court : "y", attendu , obtenu .
La correction.
def compte_voyelles(s):
"""Nombre de voyelles de s, majuscules comprises, y compris le y.
Precondition : s est une chaine.
Postcondition : 0 <= resultat <= len(s).
"""
n = 0
for c in s:
if c.lower() in "aeiouy":
n = n + 1
return n
Contrôles après correction : "Oui" rend , "rythme" rend , "Yann" rend , la chaîne vide rend .
La leçon. Le test initial, "bonjour", est un mot en minuscules, sans y et sans accent. Il a été choisi en pensant au code qu'on venait d'écrire, et non au problème. C'est le biais central de la mise au point : on teste ce à quoi on a pensé, et le défaut est précisément ce à quoi on n'a pas pensé. Le remède n'est pas d'ajouter des cas au hasard, mais de repartir de la spécification — « voyelle du français » — et d'en dériver les cas : majuscule, y, chaîne vide, et, question ouverte, les lettres accentuées (é, à), que la version corrigée ne compte toujours pas. La docstring doit le dire.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.