我在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
在测试代码时,我输入了print语句,发现失败者数组有预期的结果,但是在我期望它停止后循环继续,当我已经删除分数[0]时检查分数[0]循环的最后一次迭代。为什么我的循环没有结束?
答案 0 :(得分:0)
仔细检查循环的条件。如果条件永远不等于false
,则循环将变为无限。
请参阅http://www.tutorialspoint.com/python/python_while_loop.htm的“无限循环”部分。
答案 1 :(得分:0)
如果循环没有结束是因为teams
永远不会变空。你的假设&#34;当[...] teams
变空时,循环不会结束&#34;是不正确的,可能误导了你试图解决问题。
答案 2 :(得分: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
问题是当teams
和scores
列表到达最后一对,并且第一个if
语句中的条件是True
时,最后一对是删除,两个列表都变空。
然后评估第二个if
条件,但scores
列表现在为空(由前面的if
匹配提供),因此会引发IndexError
。< / p>
将其更改为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:]