Écrire la spécification complète — prototype, docstring, précondition…
Application directe du cours · niveau 1 (application) · NSI (première), chapitre 3 — Langages et programmation · Spécifier, tester, consulter une documentation
É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.
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.