2011-06-15 69 views
0

这里是我写的:Python的阶乘程序的帮助

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

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

print number 

我希望能够输入任何数字(即大于0),但是当我输入一个数说4(4的阶乘是24)我得到这个错误:

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. 

我不明白这意味着什么,据我所知,代码应该工作,请帮助!

回答

4

这完美的作品: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) 

你应该知道,这是一个低效的,学术的实现,不应该以任何严重的应用程序中使用。

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

+2

'数= INT(数字)' – 2011-06-15 17:39:23

1

raw_input返回一个字符串,而不是一个整数:如果您使用的值一再你会好多了关闭使用gammalngamma实施和字典高速缓存以节省计算。用这种方法创建一个整数:

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

用户可能会输入除了整数之外的东西,在这种情况下,您可能想要处理该可能性。

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

递归怎么样?

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

感谢现在的工作,和我去尝试了lngamma执行,顺便说一下,这是我的项目的数学课感谢各位帮助部分! – 2011-06-17 05:03:12

-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