Python While循环输出不符合预期问题求助
While循环逻辑问题解析
你的问题出在循环内的执行顺序,导致不符合条件的值被打印出来,具体拆解下代码的执行流程:
初始状态:a = 7(list1的最大值),idx = 6(list1最后一个元素的索引)
- 第一次检查
a>4(7>4成立),进入循环- 给
a赋值为list1[6](还是7),打印7 idx减1变成5
- 给
- 第二次检查
a>4(此时a还是7,成立),进入循环- 给
a赋值为list1[5](6),打印6 idx减1变成4
- 给
- 第三次检查
a>4(此时a是6,成立),进入循环- 给
a赋值为list1[4](5),打印5 idx减1变成3
- 给
- 第四次检查
a>4(此时a是5,成立),进入循环- 给
a赋值为list1[3](4),打印4 idx减1变成2
- 给
- 第五次检查
a>4(4>4不成立),退出循环
核心问题:循环条件判断的是上一次循环结束后a的值,但你在循环里先给a赋新值再打印,导致哪怕新值不满足条件,只要上一次的a满足,就会进入循环并打印这个不符合要求的新值。
修正方案
调整循环内的执行顺序,先打印当前符合条件的a,再更新a和idx,这样就能提前终止不符合条件的打印:
list1 = [1,2,3,4,5,6,7] a = max(list1) idx = len(list1)-1 while a>4: print(a) idx = idx-1 a = list1[idx]
或者换一种更直观的写法,直接在循环内判断当前值是否符合要求,不符合就跳出:
list1 = [1,2,3,4,5,6,7] idx = len(list1)-1 while idx >= 0: a = list1[idx] if a <= 4: break print(a) idx -= 1
这两种写法都能输出你期望的7,6,5。
内容的提问来源于stack exchange,提问作者ranjit more
相关产品推荐
相关产品推荐

