Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中找到偶数阶乘?_Python_Loops_For Loop_Numbers_Factorial - Fatal编程技术网

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

如何在python中找到偶数阶乘?,python,loops,for-loop,numbers,factorial,Python,Loops,For Loop,Numbers,Factorial,所以我必须定义一个名为def factorial_evensum:的函数,“num”将是大于1的任何数字。我的问题是,我必须只使用num中的偶数来计算'num'的阶乘 例如,如果num=6,那么阶乘将等于48,而不是720 我当前的代码只能对偶数输入执行常规阶乘,但不会对'num'中的偶数执行阶乘 def factorial_evens(num): num = 6 if num % 2 == 0: product = 1 for i

所以我必须定义一个名为def factorial_evensum:的函数,“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)

一个简单的方法是:使用步长参数来设置范围,并将输入调整为均匀

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

一个简单的方法是:使用步长参数来设置范围,并将输入调整为均匀

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

你的位置不对。这看起来像你尝试过的,但应该有效

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)

你的位置不对。这看起来像你尝试过的,但应该有效

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,只需使用reduce和xrange检查范围,过滤奇数,减少它们,这里是函数的用法:

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,只需使用reduce和xrange

就可以替换你的循环:对于range1中的i,num,2:很抱歉,这不会将范围限制为2吗?编辑:成功了!你能解释一下怎么做吗?所以,如果num是,就不会有输出了@hashcode55 range2,num+1,2?@Pritster5这意味着以2.FWIW的间隔从1迭代到num,这个函数称为,或者有时称为半阶乘,这是一个更合理的名称,IMHO。只需替换你的循环:对于range1中的i,num,2:很抱歉,这不会将范围限制为2吗?编辑:成功了!你能解释一下怎么做吗?所以,如果num是,就不会有输出了@hashcode55 range2,num+1,2?@Pritster5这意味着以2.FWIW的间隔从1迭代到num,此函数称为,或者有时称为半阶乘,这是一个更合理的名称,IMHO。你希望num+1在我相信的范围内。你希望num+1在我相信的范围内。这是Python2,OP可能使用Python3,但除此之外,如果Python2正确,导入functools以使用reduce很奇怪。还有一段路要走,不过是一些小的吹毛求疵罢了。使用range对两者都有效,并且鉴于num的大小不应该占用内存…对不起,伙计们,我有一个python2-3的混音,我会编辑来解释为什么不使用reduceint。mul,range2,num+1,2,1?不会range1,num+1,2只得到奇数?这是Python2,OP可能使用Python3,但除此之外,如果Python2正确,导入functools以使用reduce会很奇怪。还有一段路要走,不过是一些小的吹毛求疵罢了。使用range对两者都有效,并且给定num的大小不应该占用内存…对不起,伙计们,我有一个python2-3的混音,我会编辑来解释为什么不使用reduceint。mul,range2,num+1,2,1?range1,num+1,2不会只得到奇数吗?