
Envoyé par
Beginner.
Bon comme promis dans l'autre fil à
binarygirl je poste une solution "faite maison" pour comparaison avec les solutions utilisant les modules natifs...
1 2 3 4 5 6 7 8 9
| def is_bissextile(annee):
return annee % 4 == 0 and annee % 100 != 0 or annee % 400 == 0
def lst_annees_bissextiles(a1, a2):
annees_bissextiles = []
for a in range(a1, a2):
if is_bissextile(a):
annees_bissextiles.append(a)
return annees_bissextiles |
Bon c'est un exercice à la base mais si ça se trouve (à vérifier...) cette solution est aussi/plus performante que les solutions utilisant les modules natifs...
On peut faire plus rapide :
1- On utilise (au maximum 4 fois) la fonction is_bissextile * pour trouver la première année bissextile a_bissextile_1
2- Ensuite on fait une boucle for avec un range(a_bissextile_1 +4, a2, 4)- Du coup un peu plus de 4 fois moins de tour de boucles
- plus besoin de tester si l'année est multiple de 4 ce qui nous économise n fois l'évaluation de annee % 4 == 0 (n est une valeur entre a2-a1-1 et a2-a1-4)
- on économise n appels de fonction (c'est une petite économie mais c'est une économie quand même)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| def is_bissextile(annee):
return annee % 4 == 0 and (annee % 100 != 0 or annee % 400 == 0)
def lst_annees_bissextiles2(a1, a2):
annees_bissextiles = []
# on cherche la première année bissextile...
for a in range(a1, a1+4):
if is_bissextile(a):
annees_bissextiles.append(a)
break
# Maintenant on ne boucle que sur les années multiples de 4
# à partir de a + 4
for a in range(a + 4, a2, 4):
if a % 100 != 0 or a % 400 == 0:
annees_bissextiles.append(a)
return annees_bissextiles |
* On peut la rendre plus rapide simplement en ajoutant une parenthèse (cf. #20) ou on peut aussi utiliser cette version #17 qui est plus rapide)
Partager