Adloun

Voici une fonction censée compter les voyelles d'une chaîne

Exercice de TD · niveau 3 (difficile) · NSI (première), chapitre 3 — Langages et programmation · Mettre au point : construire un jeu de tests

É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 : &quot;Oui&quot; rend , &quot;rythme&quot; rend , &quot;Yann&quot; rend , la chaîne vide rend .

La leçon. Le test initial, &quot;bonjour&quot;, 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.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.