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 个回答
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)
不过你要知道,这种写法效率不高,属于学术性质的实现,不适合用在任何正式的应用中。如果你需要多次使用这些值,使用 gamma
或 lngamma
的实现方式,再加上一个字典缓存来保存计算结果,会更有效率: