下面是我写的内容:
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.我不明白这是什么意思,据我所知,代码应该是可以工作的,请帮帮我!
发布于 2011-06-16 01:37:51
这很好用: 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实现和字典缓存来节省计算会好得多:
http://mathworld.wolfram.com/GammaFunction.html
发布于 2011-06-16 16:06:49
那么递归呢?
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)发布于 2011-06-16 16:01:44
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:
breakhttps://stackoverflow.com/questions/6361824
复制相似问题