Python 阶乘0的这个def如何返回1

Python 阶乘0的这个def如何返回1,python,while-loop,function,Python,While Loop,Function,我正在学习python课程简介。下面是我们的一个问题,我们必须创建一个过程来找到一个数字的阶乘。我不明白当我输入数字0时,它返回数字1 如果输入阶乘(0),任何乘以0的值不是0吗?那么,它是如何产生数字1作为答案的呢 def factorial(n): result = 1 while n >= 1: result = result * n n = n - 1 return result print factorial(0) #&g

我正在学习python课程简介。下面是我们的一个问题,我们必须创建一个过程来找到一个数字的阶乘。我不明白当我输入数字0时,它返回数字1

如果输入阶乘(0),任何乘以0的值不是0吗?那么,它是如何产生数字1作为答案的呢

def factorial(n):
    result = 1
    while n >= 1:
        result = result * n
        n = n - 1
return result    

print factorial(0)
#>>> 1
谢谢,,
Tom

一个简单的方法是添加

if n == 0:
    result = 0
所以代码应该是

def factorial(n):
    result = 1
    if n == 0:
        result = 0
    while n >= 1:
         result = result * n
         n = n - 1
    return result    

print factorial(0)
基本上,发生的情况是,因为零大于一,所以
while
循环从未启动,因此也从未更改
结果。因为
result
的默认值是1,所以返回的是1。希望这有帮助


编辑:正如用户“Haris”向我指出的,零的阶乘实际上是一。但是,如果您想知道python为什么会产生这样的结果,如上所述。

falsetru提供的答案:


0>=1为False…因此循环体从不执行,结果最初定义为1,因此返回结果为1。

0>=1
False
。所以循环体永远不会执行。所以不要乘以
0
。用笔和纸在上面画一画,你会很快找到的!您是在问函数为什么返回该值,还是在数学上为0!==1.第一个问题我回答错了。第二。。。在这里询问函数为什么返回1并不合适。但我想falsetru已经回答了。由于循环体从未执行过,并且结果最初定义为1,因此返回结果为1。0的阶乘为1,这不是我的错误,我在数学中从未学过。可能是因为通常不需要0的阶乘: