如何在python中找到偶数阶乘?
所以我必须定义一个名为def factorial_evensum:的函数,“num”将是大于1的任何数字。我的问题是,我必须只使用num中的偶数来计算'num'的阶乘 例如,如果num=6,那么阶乘将等于48,而不是720 我当前的代码只能对偶数输入执行常规阶乘,但不会对'num'中的偶数执行阶乘如何在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_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不会只得到奇数吗?