所以我必须定义一个名为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)
答案 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,只需使用reduce
和xrange