Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →