如何找到 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,只需使用reduce
和xrange
所以我必须定义一个名为 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,只需使用reduce
和xrange