如何在python中改进我的阶乘函数?

时间:2016-12-29 02:44:18

标签: python python-2.7 factorial

我是python的新手,我需要创建一个阶乘函数。我已经创建了一个函数,它给出了一个数字的阶乘,但是我想从stackflow社区获得一些帮助。

这是我的代码

a = 5
b = 1
for i in range(1,a+1):
    b = b * i
    print b

这是我的输出:

enter image description here

我得到120(阶乘值),但我也得到其他值,如1,2,6。我怎么才能打印阶乘值而不是其他值。

5 个答案:

答案 0 :(得分:1)

您可以在Python中使用Math库,请尝试以下代码

import math
math.factorial(5)
  

答案:120

或者, 在你的代码中,你试图在循环中打印'b',所以你在每个循环时间内获得打印,只需将print b放在循环的外侧

a = 5
b = 1
for i in range(1,a+1):
    b = b * i
print b

答案 1 :(得分:0)

取消print语句,使其仅在循环后执行,而不是在每个步骤中执行。

a = 5
b = 1
for i in range(1,a+1):
    b = b * i
print b

答案 2 :(得分:0)

只是为了向您展示一种不同的方法:

def fact(n):
    return reduce(lambda accum, element: accum * element, range(1, n+1), 1)

print fact(5)  # prints 120

答案 3 :(得分:0)

如果你需要编写一个函数,那么你会想要更像这样的东西:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

这会递归计算阶乘。如果你想要一个迭代函数,那么下面将会这样做:

def factorial(n):
    res = 1
    for i in range(1, n+1):
        res *= i
    return res

否则,如果您不需要自己创建函数,则可以导入数学库并使用math.factorial(n)。

答案 4 :(得分:0)

因子最好使用生成器函数计算。要检索最后一项,您可以使用deque

def factorial(n):
    ct = 1
    factor = 1
    while ct <= n:
        yield factor
        ct = ct+1
        factor = factor * ct
from collections import deque
x = deque(factorial(10), maxlen=1).pop()
x
3628800