Adloun

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éclenche AssertionError: 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

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 →