a) Proposer une fonction ##facto## qui admet comme argument un entier naturel ##n## et retourne la factorielle de ##n##.
Définition :
La factorielle d’un entier naturel ##n## notée ##n!## est le produit de tous les nombres entiers entre ##1## et ##n##, compris. Ainsi, pour déterminer la factorielle d’un nombre entier, nous pouvons utiliser la formule suivante :
Besoin d’aide ?
a) Définir une variable ##result## . Puis multiplier ##result## par un entier pour chaque étape de la boucle ##for##.
Correction détaillée
a) On commence par initialiser une variable ##result## à ##1## pour prendre en compte les cas ##0! = 1## et ##1! = 1##.
Puis on fais une boucle ##for## de ##2## à ##n##
(on utilisera ##(n + 1)## car ##(n + 1)## est exclus ce qui nous donnera biens de ##2## à ##n##.
À chaque étape de la boucle, on multiplie ##result## par ##i##
def facto(n):
"""
Calcule la factorielle d'un entier n.
Args:
n (int): Un entier positif ou nul.
Returns:
int: La factorielle de n.
Raises:
ValueError: Si n n'est pas un entier positif ou nul.
"""
if not isinstance(n, int) or n < 0:
raise ValueError("n doit être un entier positif ou nul")
result = 1 # 0! = 1 et 1! = 1
for i in range(2, n + 1): # Pour i de 2 inclus à n inclus
result *= i
return result
# Tests automatisés
assert facto(0) == 1
assert facto(1) == 1
assert facto(2) == 2
assert facto(3) == 6
assert facto(4) == 24
assert facto(5) == 120
assert facto(6) == 720
assert facto(7) == 5040
assert facto(8) == 40320
assert facto(9) == 362880
assert facto(10) == 3628800
print("Tous les tests ont réussi !")