尝试使用发电机打印自然数的阶乘。将输出设为1 1 1 1 1而不是1 1 2 6 24 120 ......?

时间:2018-02-06 11:36:43

标签: python

def my_gen():
    number = 1
    fact = 1
    fact = fact * number //Trying to calculate factorial
    yield fact
    number  = number + 1

a = my_gen()
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))

尝试打印前五个自然数的输出。 预期产出:1 1 2 6 24 获得输出:1 1 1 1 1 我怎么能这样做?。感谢任何帮助

4 个答案:

答案 0 :(得分:2)

如果你想把它写成一个生成器,你可能想查找它是如何工作的。生成器不得不重复产生一个值,你的函数只提供一个单一的产量,即没有“下一个”。修复,适用于任意大小的阶乘,可能涉及itertools.count,如此:

from itertools import count
def factorial():
    res = 1
    for x in count(1):
        res = x*res
        yield res

这从值1开始,在每次迭代后乘以下一个更高的数字,并产生该结果。 如果你想获得第一个值,1,两次,然后在进入for循环之前插入另一个yield res

答案 1 :(得分:0)

这可以帮助您解决问题。

 def my_gen(num):
      if num < 0:
         return 0
      elif num == 0:
         return 1
      else:
         for i in range(1,num + 1):
             factorial = factorial*i
         return factorial

    a = 1
    print(my_gen(a))
    a = a+1
    print(my_gen(a))
    a = a+1
    print(my_gen(a))
    a = a+1
    print(my_gen(a))
    a = a+1
    print(my_gen(a))

答案 2 :(得分:0)

这是经过测试的代码

from itertools import count
def factorial():
    res = 1
    for x in count(1):
        yield res
        res = x*res

fs = factorial()
for item in range(10):
    print(next(fs))

答案 3 :(得分:0)

def factorial(x):
    start = 0
    fact = 1
    while start <= x:
        yield fact
        start = start + 1
        fact = fact * start
fact = factorial(5)
print(next(fact))
print(next(fact))
print(next(fact))
print(next(fact))