NSI (première) · Chapitre 3 · Application directe du cours
Écrire la spécification complète — prototype, docstring, précondition…
Langages et programmation · Spécifier, tester, consulter une documentation · niveau 1 (application)
Énoncé
Écrire la spécification complète — prototype, docstring, précondition et postcondition vérifiées par assert — d'une fonction aire_disque(r). Tester le cas ordinaire, le cas limite et le cas interdit.
Corrigé
import math
def aire_disque(r):
"""Aire d'un disque de rayon r.
Precondition : r >= 0.
Postcondition : le resultat est >= 0, et nul si et seulement si r est nul.
"""
assert r >= 0, "un rayon est positif ou nul"
a = math.pi * r * r
assert a >= 0
return a
Les trois familles de cas.
- ordinaire :
aire_disque(2)vaut ; - limite :
aire_disque(0)vaut exactement ; - interdit :
aire_disque(-1)déclencheAssertionError: un rayon est positif ou nul.
assert abs(aire_disque(1) - math.pi) < 1e-12
assert aire_disque(0) == 0.0
try:
aire_disque(-1)
print("ECHEC : l'assertion aurait du se declencher")
except AssertionError:
print("ok : cas interdit bien refuse")
Deux détails de chapitre 2. On compare l'aire à avec une tolérance ( ou ), jamais par ==. En revanche aire_disque(0) == 0.0 est légitime : vaut exactement, car multiplier par zéro est l'une des rares opérations flottantes sans erreur d'arrondi. Savoir quand l'égalité est permise fait partie de la spécification.
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.