Adloun

NSI (première) · Chapitre 7 · Application directe du cours

Écrire contient(t, v), qui rend un booléen, à partir de recherche

Parcourir, trier, prouver · Dérouler, compter, vérifier · niveau 1 (application)

Énoncé

Écrire contient(t, v), qui rend un booléen, à partir de recherche. Pourquoi la convention « si absent » demande-t-elle de la prudence en Python ?

Corrigé


def contient(t, v):
    """Vrai si v figure dans t.

    Postcondition : équivaut à (v in t).
    """
    return recherche(t, v) != -1

Contrôle : contient([3, 1, 4], 4) vaut True, contient([3, 1, 4], 5) vaut False. L'équivalence avec v in t a été vérifiée sur tableaux tirés au hasard.

Le danger du . En Python, est un indice valide : il désigne le dernier élément. Sur [3, 1, 4], t[-1] vaut , sans la moindre erreur. Donc le code suivant est faux, et silencieusement :


i = recherche(t, v)
print("trouve :", t[i])      # si v est ABSENTE, affiche le dernier element !

Il annonce avoir trouvé la valeur cherchée, et affiche autre chose. C'est le pire mode de panne : pas d'exception, pas de message, juste un résultat faux.

Les deux parades. Ou bien tester le avant tout usage de l'indice — ce que fait contient ; ou bien ne pas rendre d'indice du tout quand on ne veut qu'un booléen. La seconde est meilleure : une fonction qui rend un booléen ne peut pas être mal utilisée de cette façon. Le bon type de retour élimine la classe d'erreur entière.

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 →