Écrire trois assertions pour la fonction est bissextile(annee) — une…
Application directe du cours · niveau 1 (application) · NSI (première), chapitre 11 — Conduire un projet · Tester et garder trace
Énoncé
Écrire trois assertions pour la fonction est_bissextile(annee) — une par famille de cas du chapitre 3 — en sachant qu'une année est bissextile si elle est divisible par , sauf les multiples de , sauf les multiples de .
Corrigé
def est_bissextile(annee):
"""Vrai si annee est bissextile. Precondition : annee > 0."""
assert annee > 0, "annee non positive"
return annee % 4 == 0 and (annee % 100 != 0 or annee % 400 == 0)
# Famille 1 : cas nominaux
assert est_bissextile(2024) is True
assert est_bissextile(2023) is False
# Famille 2 : cas limites -- les deux exceptions de la regle
assert est_bissextile(1900) is False, "multiple de 100 : non bissextile"
assert est_bissextile(2000) is True, "multiple de 400 : bissextile"
# Famille 3 : cas d'erreur
refuse = False
try:
est_bissextile(0)
except AssertionError:
refuse = True
assert refuse, "aurait du refuser l'annee 0"
print("les trois familles passent")
**Pourquoi et sont les cas limites.** Ce sont les deux seuls où la règle simple « divisible par » donne la mauvaise réponse. Un jeu de tests qui n'essaie que et passe intégralement sur la fonction fautive return annee % 4 == 0 : il ne teste rien de ce qui est difficile.
La méthode générale : les cas limites ne se cherchent pas au hasard, ils se lisent dans l'énoncé de la règle. Chaque « sauf » de la définition est un cas limite, et il en faut un par « sauf ». Ici, deux « sauf », donc deux tests — et ils suffisent.
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.