如何在python中找到偶数数阶因子?

时间:2017-02-27 09:08:52

标签: python loops for-loop numbers factorial

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

因此,例如,如果num = 6,则factorial将等于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)

3 个答案:

答案 0 :(得分:2)

你的条件是在错误的地方。这看起来像你尝试过的,但应该有用。

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)

答案 1 :(得分:1)

一种直截了当的方法:使用步骤参数SparseMatrix.innerIndexPtr()并将输入调整为均匀...

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

答案 2 :(得分:1)

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

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