while循环条件异常:dlzka超过4时未终止循环问题排查
循环未按预期停止的问题修复
你的代码里,dlzka 本该在达到4(len(m)的值)时停止循环,但实际跑到了14,核心问题是嵌套循环里没有及时终止逻辑:
- while循环只在每次外层循环开始时检查条件,内层循环里
dlzka达标后,不会立刻中断所有嵌套的for循环 - 内层的for循环会执行完当前迭代,导致
dlzka被多次累加
下面是修复后的代码,关键是在每次dlzka更新后检查阈值,一旦达标就逐层跳出所有循环:
m = [[1, 1, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1]] dlzka = 0 # 设定停止阈值 stop_threshold = len(m) while dlzka < stop_threshold: for i in range(len(m)): if dlzka >= stop_threshold: break for j in range(len(m[i])): if dlzka >= stop_threshold: break for k in range(len(m)): if dlzka >= stop_threshold: break # 先判断索引是否越界,避免报错 if j+k >= len(m[i]): continue if (m[i][j+k]) % 2 == 0: dlzka += 1 print(m[i][j+k]) if dlzka >= stop_threshold: break for z in range(1, len(m)): # 检查索引越界 if i+z >= len(m) or j+k+z >= len(m[i+z]): break if (m[i+z][j+k+z]) % 2 == 0: dlzka += 1 print(m[i+z][j+k+z]) if dlzka >= stop_threshold: break break else: continue break else: continue break
额外说明:原代码存在索引越界风险(比如j+k可能超出子列表长度),修复后的代码补充了越界判断,避免运行时报错。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

