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

Python中while循环仅执行一次问题:矩阵去零逻辑异常排查

问题根源分析

你的not_solved函数存在两个关键错误,直接导致while循环仅执行一次:

1. 变量初始化错误

has0 = bool 这行完全错误,你把布尔类型本身赋值给了has0,而非给它一个具体的布尔值(True/False)。正确的初始值应该是has0 = False,表示默认状态下未找到0。

2. 遍历逻辑错误

嵌套循环里的逻辑是每检查一个元素就直接覆盖has0的值:如果当前元素是0就设为True,非0就设为False。这意味着只要矩阵最后一个元素不是0,不管前面有没有0,函数都会返回False。第一次循环后,矩阵最后一列变为1(非0),函数直接返回False,while循环因此终止。

正确的逻辑应该是:一旦找到0,就将has0设为True,之后无需再修改它;或者遍历完所有元素后,判断是否存在任意一个0即可。

修正后的代码
def not_solved(matrix):
    has0 = False  # 初始化正确的布尔值
    for i in range(3):
        for j in range(3):
            if matrix[i][j] == 0:
                has0 = True
                # 找到0后可直接提前返回,提升效率
                return has0
    return has0


matrix1 = [[-1, -2, 0], [-1, -2, 0], [-1, -2, 0]]

while not_solved(matrix1):
    for i in range(3):
        for j in range(3):
            if matrix1[i][j] <= 0:
                matrix1[i][j] += 1

print(matrix1)

也可以用更简洁的写法(利用any函数简化判断逻辑):

def not_solved(matrix):
    # 遍历每一行,只要任意一行存在0就返回True
    return any(0 in row for row in matrix)

运行修正后的代码,就能得到预期结果[[1,1,1],[1,1,1],[1,1,1]]。

内容的提问来源于stack exchange,提问作者talya gilmore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:01:16