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
相关产品推荐
相关产品推荐

