当我尝试使用以下代码查找阶乘时,它适用于除“ 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
答案 0 :(得分:5)
在Python 3中,至少reduce()
具有一个“初始化程序”参数,该参数“位于计算中序列的项目之前,并在序列为空时用作默认值”({{ 3}})。因此,请使用1
的初始化程序。您还可以通过使用operator
模块中的乘法运算符来简化代码。
from functools import reduce
from operator import mul
result = reduce(mul, range(1,n+1), 1)
您现在应该了解您的错误。错误消息表明您尝试在reduce()
上使用empty sequence with no initial value
。放入1
的初始值即可解决问题。