Années bissextiles⚓︎
Les années bissextiles comportent 366 jours. Contrairement à ce que l'on pense couramment, elles ne se rencontrent pas exactement tous les 4 ans !
En effet :
- une année non divisible par 4 n'est pas bissextile,
- parmi les années divisibles par 4 :
- les années qui ne sont pas divisibles par 100 sont bissextiles,
- parmi les années divisibles par 100 :
- les années qui ne sont pas divisibles par 400 ne sont pas bissextiles,
- les autres sont bissextiles.
graph LR
A{annee est div. par 4 ?} -->|Non| B[Non bissextile]
A --->|Oui| C{annee NON div. par 100 ?}
C -->|Oui| D[Bissextile]
C ---> |Non| E{annee est div. par 400 ?}
E --> |Non| F[Non bissextile]
E --> |Oui| G[Bissextile]
Par exemple :
- 2022 n'est pas divisible par 4 : elle n'est pas bissextile ;
- 2020 est divisible par 4, mais pas par 100 : elle est bissextile ;
- 2100 est divisible par 4, par 100, mais pas par 400 : elle n'est pas bissextile ;
- 2400 est divisible par 4, par 100 et par 400 : elle est bissextile.
Aide - Tester la divisibilité avec Python
Avec Python, il est possible de tester la divisibilité de a
par b
en utilisant l'opérateur "modulo" %
qui renvoie le reste de la division euclidienne de a
par b
.
Si ce reste vaut 0
alors a
est divisible par b
. Dans le cas contraire, a
n'est pas divisible par b
.
>>> # 15 est-il divisible par 3 ? -> Oui
>>> 15 % 3 == 0
True
>>> # 500 est-il divisible par 7 ? -> Non
>>> 500 % 7 == 0
False
>>> # 500 est-il NON divisible par 7 ? -> Oui
>>> 500 % 7 != 0
True
Compléter la fonction est_bissextile
ci-dessous renvoyant True
si l'année passée en argument est bissextile, False
dans le cas contraire.
Exemples
>>> est_bissextile(2022)
False
>>> est_bissextile(2020)
True
>>> est_bissextile(2100)
False
>>> est_bissextile(2400)
True
def estpy-undbissextile(annee):bksl-nl ...bksl-nlbksl-nl# Testsbksl-nlassert estpy-undbissextile(2022) == Falsebksl-nlassert estpy-undbissextile(2020) == Truebksl-nlassert estpy-undbissextile(2100) == Falsebksl-nlassert estpy-undbissextile(2400) == Truebksl-nldef estpy-undbissextile(annee):bksl-nl if annee % 4 != 0:bksl-nl return Falsebksl-nl if annee % 100 != 0:bksl-nl return Truebksl-nl if annee % 400 != 0:bksl-nl return Falsebksl-nl return Truebksl-nlbksl-nlbksl-nl# Testsbksl-nlassert estpy-undbissextile(2022) == Falsebksl-nlassert estpy-undbissextile(2020) == Truebksl-nlassert estpy-undbissextile(2100) == Falsebksl-nlassert estpy-undbissextile(2400) == Truebksl-nlbksl-nl
A
Si l'on applique la règle telle qu'elle est formulée dans l'énoncé on obtient :
def est_bissextile(annee):
if annee % 4 != 0: # année non div. par 4
return False
else: # année div. par 4
if annee % 100 != 0: # année non div. par 100
return True
else: # année div. par 100
if annee % 400 != 0: # année non div. par 400
return False
else: # année div. par 400
return True
Il est aussi possible de structurer le code avec des elif
:
def est_bissextile(annee):
if annee % 4 != 0: # année non div. par 4
return False
elif annee % 100 != 0: # année div. par 4
# et pas par 100
return True
elif annee % 400 != 0: # année div. par 4
# et par 100
# mais pas par 400
return False
else: # année div. par 4
# et par 100
# mais pas par 400
return True
En utilisant plusieurs return
, on peut obtenir un code plus lisible :
On peut aussi répondre en une ligne :
def est_bissextile(annee):
return (annee % 4 == 0 and annee % 100 != 0) or annee % 400 == 0
Z