Python Factorial程序帮助

时间:2011-06-15 17:35:44

标签: python factorial

这是我写的:

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 个答案:

答案 0 :(得分: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)

您应该知道这是一个效率低下的学术实现,不应该用于任何严肃的应用程序。如果您重复使用值,那么使用gammalngamma实现和字典缓存来节省计算会更好:

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

答案 1 :(得分: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)

答案 2 :(得分:1)

raw_input返回一个字符串,而不是整数。以这种方式创建一个整数:

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

答案 3 :(得分:-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