Python循环无法跳出求助:满足item>=32时循环未终止
解决Python循环无法跳出且结果错误的问题
我来帮你分析下代码里的问题,以及怎么修复它。
你遇到的情况:明明找到了>=32的元素,won也变成了True,但循环没终止,最后返回的结果还不对。这是因为你的代码有两个关键问题:
问题1:内层break只跳出当前内层循环,外层循环仍在执行
当你在内层for item in row循环里执行break时,只会跳出这个遍历元素的循环,外层的for row in grid循环还会继续遍历下一行。更糟的是,后面行里的元素如果小于32,会把won重新设为False,直接覆盖之前的True值,导致最后返回错误结果。
问题2:主函数里的变量名笔误
你定义的测试变量是grid1,但调用函数时写的是check_if_won(grid2),这会导致运行时报错,这个小细节也要修正。
修复方案1:找到符合条件的元素直接返回(最推荐)
这种方法最简洁高效,一旦找到>=32的元素,立刻返回True,直接终止所有循环,不用再遍历剩下的元素:
def check_if_won(grid): """return True if a value>=32 is found in the grid; otherwise False""" for row in grid: for item in row: if item >= 32: return True # 遍历完所有元素都没找到,才返回False return False if __name__ == "__main__": grid1 = [[4,2,32,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]] print(check_if_won(grid1)) # 修正了grid2的笔误
修复方案2:使用标志位控制外层循环
如果你一定要保留won变量,可以在找到元素后,同时控制外层循环终止,避免后续元素覆盖won的值:
def check_if_won(grid): """return True if a value>=32 is found in the grid; otherwise False""" won = False for row in grid: if won: # 已经找到符合条件的元素,直接跳出外层循环 break for item in row: if item >= 32: won = True # 跳出内层元素循环 break return won if __name__ == "__main__": grid1 = [[4,2,32,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]] print(check_if_won(grid1))
这样修改后,当找到第一个>=32的元素时,won设为True,内层break,外层循环检查到won为True也会break,不会再遍历后面的行和元素,最后返回正确的True。
内容的提问来源于stack exchange,提问作者Michelle Lopes
相关产品推荐
相关产品推荐

