Adloun

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

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 →