当我尝试使用以下代码查找阶乘时,它适用于除“0”以外的所有数字。当我将输入设为 0 时,会显示以下错误。有人可以帮助我理解和修复错误吗
from functools import reduce
n = int(input())
fact = lambda a, b: a*b if (n>=1) else 1
reduce(fact, range(1,n+1))
预期结果:当输入为“0”时,输出应显示为 1
实际结果:显示以下错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-124-52f472210976> in <module>
3
4 fact = lambda a, b: a*b if (n>=1) else 1
----> 5 reduce(fact, range(1,n+1))
6
TypeError: reduce() of empty sequence with no initial value
最佳答案
至少在 Python 3 中,reduce()
有一个“初始化器”参数,它“在计算中放在序列的项之前,并在序列被执行时作为默认值空”(documentation)。所以使用 1
的初始值设定项。您还可以通过使用 operator
模块中的乘法运算符来简化代码。
from functools import reduce
from operator import mul
result = reduce(mul, range(1,n+1), 1)
你现在应该明白你的错误了。错误消息表明您试图在 没有初始值的空序列
上使用 reduce()
。输入 1
的初始值可以解决这个问题。
关于python - 如何修复没有初始值错误的空序列的 reduce()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997025/