此函数应该用于计算阶乘,但事实并非如此。 [蟒-3.X]

时间:2013-08-15 21:39:15

标签: function math python-3.x factorial

(完全披露,我正在使用CodeAcademy的Python教程,并使用他们基于Web的IDE。)

def factorial(x):
    bang = 1
        for num in x:
            bang = bang * num
    return bang

在java中,这适用于从小于2,147,483,647的数字生成阶乘。我认为它应该在python中工作,但事实并非如此。相反,我得到错误:

“Traceback(最近一次调用最后一次): 在factorial中输入“python”,第3行 TypeError:'int'对象不可迭代“

也许这里有一些我不理解的东西,或者说我的语法错了。我进一步测试并创建了一个名为factorial的独立函数迭代:

def factorial(x):
    if x > 2:
        return x
    else:
        return x(factorial(x-1))

这也不起作用,给我一个错误:

“Traceback(最近一次调用最后一次): 在阶乘中归档“python”,第11行 TypeError:'int'对象不可调用“

我是一个python noob,但似乎这两个都应该有效。请告知学习Python语法的最佳方法......

2 个答案:

答案 0 :(得分:3)

如果for num in x是整数,则无法x。如错误所示,整数不是“可迭代的”。你想要这样的东西:

def factorial(x):
    bang = 1
    for num in xrange(1, x+1):
        bang = bang * num
    return bang

xrange(或range)将为in生成必要的数字范围。

答案 1 :(得分:1)

def f(x):
        if x < 2:
            return 1
        else:
            return x * f(x - 1)