2017-07-23 134 views
-2

我試圖用發生器練習。我以爲我有一個很好的處理它,但這個發電機:Python發生器卡在無限循環

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行,但我不確定我能做些什麼來解決它。任何幫助,將不勝感激。

+2

'收益率從範圍(NUM,NUM + N)' –

+2

好了,條件是重新計算每次迭代。 – ForceBru

+0

@ ForceBru這很有道理。我覺得這很簡單。 –

回答

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) 
+1

這是一個很好的迴應。我讚賞正確的語法及其背後的邏輯。謝謝!我將不得不記住這個以備將來使用!這看起來像一個小細節,我一開始會經常忘記。 –

+0

@NickBohl很高興我能幫忙:) –