python中while嵌套循环的执行流程问题?

1.

while x < 3:
    print("x的当前值为%d" % x)


    y = 0
    while y < 3:
        print("y的当前值为%d" % y)
        print("内层循环")
        y += 1
        print("y的累加值为%d" % y)


    print("外层循环")
    x += 1
    print("x的累加值为%d" % x)

执行结果如下: (嵌套的内循环计数器在外循环内部)

第1次完整循环
x当前值 = 0
y当前值 = 0
内层循环
y累加值 = 1
y当前值 = 1
内层循环
y累加值 = 2
y当前值 = 2
内层循环
y累加值 = 3
外层循环
x累加值 = 1


第2次完整循环

x当前值 = 1
y当前值 = 0
内层循环
y累加值 = 1
y当前值 = 1
内层循环
y累加值 = 2
y当前值 = 2
内层循环
y累加值 = 3
外层循环
x累加值 = 2


第3次完整循环

x当前值 = 2
y当前值 = 0
内层循环
y累加值 = 1
y当前值 = 1
内层循环
y累加值 = 2
y当前值 = 2
内层循环
y累加值 = 3
外层循环
x累加值 = 3


不再满足条件

2.


x = 0
y = 0

while x < 3:
    print("x当前值 = %d" % x)


    while y < 3:
        print("y当前值 = %d" % y)
        print("内层循环")
        y += 1
        print("y累加值 = %d" % y)


    print("外层循环")
    x += 1
    print("x累加值 = %d" % x)

执行结果如下: (嵌套的内循环计数器在外面)

第1次完整循环

x当前值 = 0
y当前值 = 0
内层循环
y累加值 = 1
y当前值 = 1
内层循环
y累加值 = 2
y当前值 = 2
内层循环
y累加值 = 3
外层循环
x累加值 = 1



第2次完整循环

x当前值 = 1
外层循环
x累加值 = 2



第3次完整循环

x当前值 = 2
外层循环
x累加值 = 3

为什么会出现这种差异呢? 看了视频, 老师只告诉这种差异存在, 自己也分析了执行流程, 但那是从结果分析原因, 总觉得对其中原理有点迷糊.

有什么更明确清晰的理解方法吗? 像python代码从上到下, 从左到右, LEGB原则?

阅读 2.4k
2 个回答

本质区别在于y = 0一句出现的位置,如果y = 0出现在外层循环外部那么y只会在外层循环开始前初始化为0,如果y = 0出现在外层循环内、内层循环前,那么y会在每次内层循环开始前都初始化为0。

流程因为能直接分析出来的,重点在与y=0这句:

  • 例2中的y=0在外层while循环的外部,导致x的第一次循环内,while y < 3的内层循环就直接将y的值加到3了,导致外层循环之后的两次循环都不会执行内层循环。
  • 例1中,外层循环第一遍执行完之后,在第二次外层循环的时候回执行y=0,这个时候y的值重置了,所以会内层循环仍然会被执行,第三遍循环同理。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题