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

Python中嵌套While循环问题:内层循环仅首次执行

解决嵌套While循环内层仅执行一次的问题

嘿,我猜你大概率是把内层循环的变量初始化放在外层循环外面了!这是初学者很容易踩的坑,咱们一步步来看。

先还原一下你可能写的错误代码:

items = [['.', '.', '.', '.', '.', '.'], ['.', 'O', 'O', '.', '.', '.'], ['O', 'O', 'O', 'O', '.', '.'], ['O', 'O', 'O', 'O', 'O', '.'], ['.', 'O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O', '.'], ['O', 'O', 'O', 'O', '.', '.'], ['.', 'O', 'O', '.', '.', '.'], ['.', '.', '.', '.', '.', '.']]

e = 0
i = 0  # 问题出在这儿!i被定义在外层循环外面了
while e < len(items):
    while i < len(items[e]):
        print(items[e][i], end='')
        i += 1
    print()
    e += 1

问题原因

第一次外层循环(e=0)时,i从0开始,一直加到6(因为每个子列表长度是6),此时内层循环结束。当e自增到1后,i已经是6了,而len(items[1])也是6,i < len(items[e])的条件不成立,内层循环直接跳过。后面的e值都会遇到同样的情况,所以只有第一行能打印出来。

修复方案

把内层循环的变量i的初始化移到外层循环里面,每次外层循环处理新的一行时,都重置i为0:

items = [['.', '.', '.', '.', '.', '.'], ['.', 'O', 'O', '.', '.', '.'], ['O', 'O', 'O', 'O', '.', '.'], ['O', 'O', 'O', 'O', 'O', '.'], ['.', 'O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O', '.'], ['O', 'O', 'O', 'O', '.', '.'], ['.', 'O', 'O', '.', '.', '.'], ['.', '.', '.', '.', '.', '.']]

e = 0
while e < len(items):
    i = 0  # 每次外层循环都重置i
    while i < len(items[e]):
        print(items[e][i], end='')
        i += 1
    print()
    e += 1

这样每次处理新的一行时,i都会从0开始遍历当前行的所有元素,就能正常打印出所有行的图案了。

更Pythonic的写法

其实在Python里,遍历列表用for循环会更直观,代码也更简洁,完全可以替代嵌套while:

for row in items:
    for char in row:
        print(char, end='')
    print()

甚至可以用一行代码搞定:

print('\n'.join(''.join(row) for row in items))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:04:12