Adloun

É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.