感谢金角大王alex的解惑!!!
循环是什么?
转自维基的解释:
- 循环是一段在程序中只出现一次,但可能会连续运行多次的代码。循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都运行一次。
- 完整解释移步维基百科-程序循环
python实现循环的方式有:
- for循环
- 它拥有一个循环计数器或是循环变数。这使得For循环能够知道在迭代过程中的执行顺序。
- while循环
- 可以在特定条件成立时继续循环的进行,或是特定条件不成立时继续循环的进行,进行到特定条件成立为止
这里以while循环为例,解决3层循环嵌套的进入退出。
设置3个变量,作为3个while的条件
lay1_loop = False
lay2_loop = False
lay3_loop = False
先实现一个两层循环:
while not lay1_loop: #条件为真,进入第一层while循环
print("这里是第一层循环...")
choose = input("q,退出 其他键继续: ").strip()
if choose == 'q':
lay1_loop = True
lay2_loop = True
else:
pass
while not lay2_loop: #条件为真,进入第二层while循环
print("这里是第二层循环...")
choose = input("b,返回上一层 q,退出 其他键继续: ").strip()
if choose == 'b':
lay2_loop = True
elif choose == 'q':
lay2_loop = True
lay1_loop = True
else:
pass
改进:
这段代码中,如果想要退出,就要同时设置lay1_loop, lay2_loop 为True。
假设循环有更多层的嵌套,相应的就要同时更改多个变量。这样代码就会很容易出错,也不够友好。
那么既然要退出整个循环,是否可以只要设lay1为True并且第二层的while
条件也为假呢?
修改后的代码:
while not lay1_loop: #条件为真,进入第一层while循环
print("这里是第一层循环...")
choose = input("q,退出 其他键进入下一层: ").strip()
if choose == 'q':
lay1_loop = True
else:
pass
while not (lay1_loop or lay2_loop): #当lay1为真,两个while的条件都为False,退出循环
print("这里是第二层循环...")
choose = input("b,返回上一层 q,退出 其他键进入下一层: ").strip()
if choose == 'b':
lay2_loop = True
elif choose == 'q':
lay1_loop = True
else:
pass
同理继续添加第三次while循环。
3层嵌套
while not lay1_loop: #条件为真,进入第一层while循环
print("这里是第一层循环...")
choose = input("q,退出 其他键进入下一层: ").strip()
if choose == 'q':
lay1_loop = True
else:
pass
while not (lay1_loop or lay2_loop): #当lay1为真,两个while的条件都为False,退出循环
print("这里是第二层循环...")
choose = input("b,返回上一层 q,退出 其他键进入下一层: ").strip()
if choose == 'b':
lay2_loop = True
elif choose == 'q':
lay1_loop = True
else:
pass
while not (lay1_loop or lay2_loop or lay3_loop):
print("这里是第三层循环...")
choose = input("b,返回上一层 q,退出: ").strip()
if choose == 'b':
lay3_loop = True
elif choose == 'q':
lay1_loop = True
小Bug:
当进入二层循环后:输入b返一层循环后(lay2_loop = True),程序会卡在第一层循环中,无法再次进入二层。因为第二个while的条件不成立了。
同理二层进入三层也会碰到这个问题。
解决:
第一层if中的pass语句改为 lay2_loop = False
第二层if中的pass语句改为 lay3_loop = False