Python生成器陷入无限循环

时间:2017-07-23 19:37:17

标签: python function generator

我正在尝试用发电机练习。我以为我有一个很好的处理,但这个发电机:

x = int(input("How many numbers do you want to add?: "))

def gennextfive(n):
    num=int(input('what number do you want to start at?: '))
    while num <n+num:
        yield num
        num += 1

sum_of_next_n = sum(gennextfive(x))
print(sum_of_next_n)
每次运行时,

都会陷入无限循环。问题似乎发生在第5行,但我不知道我能做些什么来解决它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

num始终小于n + num,只要nnum都是正数。您在每次迭代时递增num,这是不正确的。

您应该使用计数器,并在柜台上进行比较:

def gennextfive(n):
    num = int(input('what number do you want to start at?: '))
    i = num
    while i < n + num:
        yield i
        i += 1

由于您知道要迭代的次数,因此可以对for对象使用计数控制range循环。所以,更短的版本是:

for i in range(num, num + n):
    yield i

even shorter version将是:

yield from range(num, num + n)