Factorielle : un premier programme

Voici un embryon non fonctionnel de programme. Il y manque des éléments (à la place des “???”)

factorielle02-sur_la_piste.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Calcul de la factorielle d'un nombre
Référence : http://fr.wikipedia.org/wiki/Factorielle
"""
# on demande le nombre :
print("Calcul de la factorielle de n")
chainelue = input("Que vaut n ? ")
n = int(chainelue)
print(n)
 
# structure de répétition pour appliquer la définition de la factorielle
reponse=1  # la réponse sera dans la variable reponse
i = 1  # on va commencer par 1
while ??? <= n:  # répétition "while" avec une condition à préciser
    reponse = ????    #actualisation de reponse
    i =                #incrémenter i
 
# on affiche la réponse
print("La factorielle vaut ",reponse)

Un peu de réflexion pour se rendre compte qu'il faut comparer i à n, qu'il faut multiplier reponse par i pour obtenir une nouvelle valeur de reponse, et augmenter i de 1 par l'instruction “i = i + 1”. On propose donc ceci :

factorielle03-fonctionnel.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Calcul de la factorielle d'un nombre
Référence : http://fr.wikipedia.org/wiki/Factorielle
"""
# on demande le nombre :
print("Calcul de la factorielle de n")
chainelue = input("Que vaut n ? ")
n= int(chainelue)
print(n)
 
# structure de répétition pour appliquer la définition de la factorielle
reponse = 1  # la réponse sera dans la variable reponse
i = 1  # on va commencer par 1
while i <= n:  # répétition "while" avec une condition à préciser
    reponse = reponse * i    #actualisation de reponse
    i = i + 1                #incrémenter i
 
# on affiche la réponse
print("La factorielle vaut ",reponse)

Le test du programme indique qu'il fonctionne comme attendu pour toutes les valeurs strictement positives de n, et même pour n=0. Avez-vous compris pourquoi ? Pour bien comprendre le fonctionnement du programme, vous pouvez examiner le fonctionnement d'une version simplifiée à l'aide de pythontutor (vous y préciser n plutôt que de le demander).

Mais avons-nous terminé ? Ce programme a-t-il toutes les caractéristiques d'un code Python utile ?

Non, car il ne fait que la sortie d'une factorielle et nécessite une interaction avec l'utilisateur ! Il faudrait créer une fonction qui renvoie la factorielle d'un nombre passé en argument. De cette manière, la fonction factorielle pourrait être utilisés dans n'importe quelle condition.

Réfléchissez à une solution, et pour vérifier votre travail, allez à la page suivante !