NSI (première) · Chapitre 3 · Exercice de TD
Spécifier et écrire borner(x, a, b), qui ramène x dans l'intervalle
Langages et programmation · Mettre au point : construire un jeu de tests · niveau 3 (difficile)
Énoncé
Spécifier et écrire borner(x, a, b), qui ramène x dans l'intervalle . Donner la précondition, la postcondition, et un jeu de tests exhaustif sur un petit domaine — en expliquant pourquoi l'exhaustivité y est possible alors qu'elle ne l'est pas en général.
Corrigé
def borner(x, a, b):
"""Ramene x dans l'intervalle [a, b].
Precondition : a <= b.
Postcondition : a <= resultat <= b, et resultat == x lorsque a <= x <= b.
"""
assert a <= b, "intervalle vide"
if x < a:
r = a
elif x > b:
r = b
else:
r = x
assert a <= r <= b
return r
La précondition n'est pas cosmétique. Si , l'intervalle est vide : aucune valeur ne peut satisfaire , et la postcondition serait impossible à tenir. Une précondition trop large ne rend pas la fonction plus utile — elle rend sa promesse fausse.
La postcondition en deux parties est essentielle. La première seule () serait satisfaite par la fonction return a, qui est absurde. C'est la seconde clause — « et r == x quand x était déjà dans l'intervalle » — qui interdit cette tricherie.
Le jeu de tests exhaustif.
compte = 0
for a in range(-3, 4):
for b in range(a, 4):
for x in range(-6, 7):
r = borner(x, a, b)
assert a <= r <= b
if a <= x <= b:
assert r == x
compte = compte + 1
print(compte) # 364
triplets, tous conformes.
Pourquoi l'exhaustivité est ici possible. Parce qu'on a restreint le domaine : et entre et , entre et . Sur les entiers Python, le domaine est infini — aucun jeu de tests ne peut le couvrir. Le pari, raisonnable mais non démontré, est que si la fonction est fausse, elle l'est déjà sur de petites valeurs. On teste par-dessus le marché les bornes elles-mêmes : borner(0, 0, 10) rend et borner(10, 0, 10) rend — les deux endroits où un < écrit à la place d'un <= se verrait.
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.