Python 阶乘程序帮助

0 投票
4 回答
5216 浏览
提问于 2025-04-16 19:38

这是我写的代码:

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 个回答

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
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)
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

撰写回答