首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Factorial程序帮助

Python Factorial程序帮助
EN

Stack Overflow用户
提问于 2011-06-16 01:35:44
回答 4查看 5.1K关注 0票数 0

下面是我写的内容:

代码语言:javascript
复制
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)时,我得到这个错误:

代码语言:javascript
复制
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.

我不明白这是什么意思,据我所知,代码应该是可以工作的,请帮帮我!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-16 01:37:51

这很好用: factorial.py

代码语言:javascript
复制
#!/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

票数 4
EN

Stack Overflow用户

发布于 2011-06-16 16:06:49

那么递归呢?

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-06-16 16:01:44

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

代码语言:javascript
复制
number = int(raw_input('Enter an integer= '))

用户可能会键入整数以外的其他内容,在这种情况下,您可能希望处理这种可能性。

代码语言:javascript
复制
while True:
    try:
        number = int(raw_input('Enter an integer= '))
    except ValueError:
        print "That wasn't an integer"
    else:
        break
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6361824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档