NSI (première) · Chapitre 11 · Application directe du cours
Écrire trois assertions pour la fonction est bissextile(annee) — une…
Conduire un projet · Tester et garder trace · niveau 1 (application)
É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.
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.