Aide Python : fonction factorielle qui retourne None
Résolu
Bonsoir,
Le résultat que j'ai en sorti pour factorielle(n) est "None", Je ne comprends pas pourquoi j'ai cela, quelqu'un aurait l'aimabilité de m'expliquer et de me corriger également ?
def main(): n = int(input("Entrez un nombre N : ")) print("Votre nombre", n, "factorielle est", factorielle(n), ".") def factorielle(n): z = 1 while 1 > n: W = z * n n = n - 1 return W main()
Le résultat que j'ai en sorti pour factorielle(n) est "None", Je ne comprends pas pourquoi j'ai cela, quelqu'un aurait l'aimabilité de m'expliquer et de me corriger également ?
A voir également:
- Aide Python : fonction factorielle qui retourne None
- Citizen code python avis - Accueil - Outils
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Mot secret python pix ✓ - Forum Python
- Python par la pratique : 101 exercices corrigés pdf - Forum Python
- Exercice python - Forum Python
1 réponse
Bonjour,
Si ton programme ne rentre pas dans la boucle
Donc dans l'esprit ton code devrait plutôt ressembler à :
Après, tu peux l'écrire plus simplement :
Personnellement, j'écrirais tout simplement :
D'autres version sont envisageables, par exemple
... sous forme récursive :
... en
... ou plus alambiqué, en map/reduce :
Bonne chance
Si ton programme ne rentre pas dans la boucle
while(ce qui est le cas pour toute valeur de
nsupérieure ou égale à 1) de la fonction
factorielle, alors l'instruction
return Wn'est jamais atteinte et par défaut, python quitte la fonction factorielle en retournant
None.
Donc dans l'esprit ton code devrait plutôt ressembler à :
#!/usr/bin/env python3 def factorielle(n): produit = 1 i = 1 while i <= n: produit *= i # ou : produit = produit * i i += 1 # ou : i = i + 1 return produit n = int(input("Entrez un nombre N : ")) print(f"Votre nombre {n} factorielle est {factorielle(n)}.")
Après, tu peux l'écrire plus simplement :
#!/usr/bin/env python3 def factorielle(n): produit = 1 for i in range(1, n + 1): produit *= i return produit n = int(input("Entrez un nombre N : ")) print(f"Votre nombre {n} factorielle est {factorielle(n)}.")
Personnellement, j'écrirais tout simplement :
#!/usr/bin/env python3 import math n = int(input("Entrez un nombre N : ")) f = math.factorial(n) print(f"Votre nombre {n} factorielle est {f}.")
D'autres version sont envisageables, par exemple
... sous forme récursive :
#!/usr/bin/env python3 from functools import reduce def factorielle(n): assert n > 0 return ( 1 if n == 0 or n == 1 else n * factorielle(n - 1) ) n = int(input("Entrez un nombre N : ")) f = factorielle(n) print(f"Votre nombre {n} factorielle est {f}.")
... en
numpy:
#!/usr/bin/env python3 import numpy as np n = int(input("Entrez un nombre N : ")) f = np.prod([i for i in range(1, n + 1)]) print(f"Votre nombre {n} factorielle est {f}.")
... ou plus alambiqué, en map/reduce :
#!/usr/bin/env python3 from functools import reduce n = int(input("Entrez un nombre N : ")) f = reduce( lambda x, y: x * y, (i for i in range(1, n + 1)) ) print(f"Votre nombre {n} factorielle est {f}.")
Bonne chance
Rica
Merci pour l'aide et bonne soirée !
mamiemando
Messages postés
33772
Date d'inscription
Statut
Modérateur
Dernière intervention
7 882
>
Rica
À toi également, bonne continuation :-)