You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:23:35