您好我正在尝试编写一个函数来查找任何给定数字的阶乘积。例如,对于阶乘(6),我将得到6 * 5 * 3 * 2 * 1的乘积。
因此对于阶乘(3),输出将是6.
到目前为止我的职能是:
import functools
def mult(x, y):
return x * y
def factorial(n):
if n == 0:
return 1
else:
functools.reduce(mult(n,factorial(n - 1)))
但是我不断收到一个错误,即Python期望2个参数,并且给出1。我知道我必须以某种方式使用range
,但我无法弄明白。如何编辑现有代码以使其正常运行?
答案 0 :(得分:4)
你可以很容易地做到这一点:
>>> import functools, operator
>>> functools.reduce(operator.mul, xrange(1, 6))
120
请注意,第一个参数是函数(您正在传递函数调用的结果)。第二个参数是 iterable 。另请注意,以这种方式编写,不需要递归...
operator.mul
相当于您的mult
函数
答案 1 :(得分:1)
如果您使用的是2.7
,那么我会推荐looking here at the documentation for reduce
。如果您使用3
,那么我们就会看到
functools.reduce is the same as 2.7
's reduce
也就是说,我们发现我们需要以functools
中的方式调用2.7
。以下是对此的表示:
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
,转换为:
functools.reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
对于您的示例,您正在创建自己的运算符,这会让reduce
感到困惑。 可以通过添加 import operator
,然后使用operator
中定义的声明方法(即operator.add
)来解决此问题。
我希望这有助于澄清事情!
答案 2 :(得分:1)
import functools
def factorial(n):
if n == 0:
return 1
else:
return functools.reduce(lambda x,y: x*y, range(1,n+1))
print factorial(3)
当然,如果愿意,您可以使用自己的多功能代替lambda。
答案 3 :(得分:1)
n = int(input())
import functools
def factorial(n):
if n == 0:
return 1
else:
return functools.reduce(lambda x,y: x*y , range(1,n+1))
print(factorial(n))
输出:- 输入项 3 解决方案输出 6
答案 4 :(得分:0)
从functools导入reduce
f = lambda x,y:x * y
def阶乘(数字): if(number == 1): 返回1 其他: 返回reduce(f,range(1,number + 1))
print(factor(n))
答案 5 :(得分:0)
>>> x = 8
>>> reduce(lambda x,y: x*y, [1, 1] if x == 0 else xrange(1, x+1))
答案 6 :(得分:0)
这里是使用reduce内置函数的阶乘函数的理想摘录。当n = 0时,它将打印1,因为0的阶乘为1。
# Read the input as an integer
n = 4
# Import the reduce() function
from functools import reduce
fact = lambda x,y:x*y
print(1 if n == 0 else reduce(fact,range(1,n+1)))
答案 7 :(得分:0)
我的解决方案:
from functools import reduce
list_num = list(range(1,8,1)) # instead of 8 put the number+1 of which you need factorial
def fact_num(acc, item):
return acc*item
print(reduce(fact_num, list_num,1))
答案 8 :(得分:0)
from functools import reduce
n = int(input("Enter a number: "))
print("Factorial is:", reduce(lambda x, y: x*y, range(1, n+1)))
答案 9 :(得分:-1)
-----导入reduce()函数 从functools import减少
---将输入读取为整数 n = int(input())
fact = reduce(lambda x,y:x + y,range(n + 1)) 打印(事实)