2011-06-15 4 views
0

Voici ce que je l'ai écrit:programme Python factoriel aide

number = raw_input('Enter an integer= ') 
if number < 0: 
    print 'Invalid number' 

else: 
    for k in range(1,(number)): 
     number *= k 

print number 

Je veux être en mesure d'entrer un nombre quelconque (qui est supérieur à 0), mais quand je entrer un numéro dire 4 (le factoriel de 4 est 24) i obtenir cette erreur:

Traceback (most recent call last): 
    File "problem.py", line 6, in <module> 
    for k in range(1,(number)): 
TypeError: range() integer end argument expected, got str. 

Je ne comprends pas ce que cela signifie et pour autant que je sache, le code devrait fonctionner, S'il vous plaît aider!

Répondre

4

Cela fonctionne parfaitement: factorial.py

#!/usr/bin/env python 

# imports go here 

__author__ = 'Michael O. Duffy' 
__status__ = "Development" 

def factorial(n): 
    """ Calculate a factorial of an integer """ 
    factorial = 1 
    if n < 0: 
     print 'Invalid number' 
    else: 
     for k in range(1,n+1): 
      factorial *= k 
    return factorial 

if __name__ == '__main__': 

    for number in range(1, 20): 
     print 'n: ', number, 'n!: ', factorial(number) 

Vous devez savoir que cela est un peu efficace, la mise en œuvre académique qui ne devrait pas être utilisé dans toute application sérieuse. Vous serez beaucoup mieux à l'aide d'une mise en œuvre gamma ou lngamma et un cache dictionnaire pour enregistrer sur des calculs si vous utilisez des valeurs à plusieurs reprises:

http://mathworld.wolfram.com/GammaFunction.html

+2

'number = int (nombre)' –

1

raw_input retourne une chaîne, pas un entier. Créer un entier de cette façon:

number = int(raw_input('Enter an integer= ')) 

L'utilisateur peut taper quelque chose en plus d'un nombre entier, auquel cas vous pouvez gérer cette possibilité.

while True: 
    try: 
     number = int(raw_input('Enter an integer= ')) 
    except ValueError: 
     print "That wasn't an integer" 
    else: 
     break 
2

Qu'en est-il de la récursivité?

def factorial(n): 
    if n < 0: 
    print("ERROR!") # throw error, return -1, or whatever 
    elif n <= 1: 
    return 1 
    else: 
    return n * factorial(n - 1) 
+0

Merci ça marche maintenant, et im va essayer la mise en œuvre de lngamma, par la façon dont cela faisait partie de mon projet pour la classe de mathématiques grâce à everybodies aident ! –

-1
using xxxxx.py 
num=int(raw_input("Enter a number")) 
n=1 
while num>=0: 
    n=n*num 
    num=num-1 
print "Factorial of the given number is: ",n