2016-03-20 53 views
-3

我在Python中使用while循環來執行一個操作。然而,當我期望它(當團隊變空時)循環不會結束。這是代碼:不明白爲什麼循環不停止

while teams: 
    if scores[0]<scores[1]: 
     losers.append(teams[0]) 
     teams.remove(teams[0]) 
     teams.remove(teams[0]) 
     scores.remove(scores[0]) 
     scores.remove(scores[0]) 
    if scores[0]>scores[1]: 
     losers.append(teams[1]) 
     teams.remove(teams[0]) 
     teams.remove(teams[0]) 
     scores.remove(scores[0]) 
     scores.remove(scores[0]) 
return losers 

雖然測試的代碼,我把打印語句,發現失敗者陣列具有所期望的結果,但循環將繼續後,我希望它停下來,檢查得分[0]當我已經刪除循環的最後一個迭代的分數[0]。爲什麼我的循環沒有結束?

+3

也許有兩個temas相等的分數? – ppperry

+1

如果語句計算結果爲true,那麼等於分數將不會。你應該包括'if score [0] == scores [1]''的特例。你在調試嗎?你真的檢查過「分數」真的*是空的嗎? – BHustus

+0

這是比較NBA的比分,所以比賽連續加班,直到一支球隊獲勝。我在循環開始時打印隊伍長度時注意到的一件事是,當隊伍長度爲12,6或0時,它不打印任何東西。(6的倍數)我弄不清楚爲什麼這是,但也許這可能有助於調試? –

回答

0

的解決方法是第二if聲明更改爲elif

while teams: 
    if scores[0]<scores[1]: 
     losers.append(teams[0]) 
     teams.remove(teams[0]) 
     teams.remove(teams[0]) 
     scores.remove(scores[0]) 
     scores.remove(scores[0]) 
    elif scores[0]>scores[1]: 
     losers.append(teams[1]) 
     teams.remove(teams[0]) 
     teams.remove(teams[0]) 
     scores.remove(scores[0]) 
     scores.remove(scores[0]) 
return losers 

的問題是,當teamsscores名單到達最後一對,並在第一if語句中的條件是True,最後一對被刪除,兩個列表都變空了。

然後第二if評估條件,但scores列表現在是空的(如前述if匹配的提供),所以一個IndexError上升。

將其更改爲elif表示僅在第一個條件爲False時纔會評估第二個條件。現在循環每次迭代只會處理一組球隊/分數,並且空的team的測試將會成功。

你可以使while循環更清晰了一下這個:

while teams: 
    if scores[0] < scores[1]: 
     losers.append(teams[0]) 
    elif scores[0] > scores[1]: 
     losers.append(teams[1]) 
    else: 
     # this should never happen 
     print('Error: drawn match detected!') 
     losers.append(None) # or simply ignore if that makes sense 

    teams[:] = teams[2:] # remove the first 2 items 
    scores[:] = scores[2:] 
+0

我討厭生活 謝謝 –

+0

@AdlaiAbdelrazaq:你的特權,只是不要怪我:) – mhawke

0

如果循環未結束是因爲teams永遠不會變空。你的假設「當teams變空時循環不會結束」是不正確的,可能會誤導你試圖解決問題。

+0

我同意,「團隊」永遠不會變空,我說錯了我的問題。我不明白爲什麼它永遠不會變空。 如果您運行以下代碼:http://pastebin.com/Q1SxzFem 您將會看到,當'teams'的長度爲12,6和0時,不會打印任何內容。我懷疑循環沒有終止的原因與此有關,但我不明白他們爲什麼沒有被打印出來。 –