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 我怎么能这样做?。感谢任何帮助
答案 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))