如何找到 python 中的偶数阶乘?

How to find an EVEN number factorial in python?

所以我必须定义一个名为 def factorial_evens(num) 的函数:并且 'num' 将是任何大于 1 的数字。我的问题是我必须计算 'num' 只使用 num 中的偶数。

例如,如果 num = 6,则阶乘等于 48 而不是 720。

我当前的代码只能对偶数输入进行常规阶乘,但不能对 'num' 中的偶数进行阶乘。

def factorial_evens(num):
    num = 6
    if num % 2 == 0:
        product = 1       
        for i in range(num):
            product = product * (i+1)
        print(product)

一种直接的方法:使用步进参数range并调整输入为偶数...

def factorial_evens(num):
    if num < 0:
        raise ValueError("argument must be non-negative")
    if num % 2 == 1:
        num -= 1
    result = 1
    for x in range(num, 0, -2):
        result *= x
    return result

进行中:

In [3]: factorial_evens(6)
Out[9]: 48

In [4]: factorial_evens(7)
Out[4]: 48

In [5]: factorial_evens(8)
Out[5]: 384

你的条件用错了地方。这看起来像您尝试过的方法,但应该有效。

def factorial_evens(num):
     product = 1       
     for i in range(num):
         if (i % 2 == 1):
             product = product * (i+1)
     print(product)

最好在范围声明中使用步幅来省力

def factorial_evens(num):
    product = 1
    for i in range(2, num+1, 2):
        product *= i
    print(product)

检查范围,过滤奇数,减少它们,这里是功能方法:

from functools import reduce
import operator
def fact_evens(num):
    return reduce(operator.mul, filter(lambda x: x%2 == 0, range(1, num+1)))


fact_evens(6)
48

好多了,不要过滤,只需在范围内跳 2 跳 2:

reduce(operator.mul, range(1, num+1, 2))

编辑:对于python2,只需使用reducexrange