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 :

$$n! = 1 \times 2 \times 3 \times \dots \times (n – 1) \times n$$

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##

Python
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 !")