感謝金角大王alex的解惑!??!
循環(huán)是什么?
轉(zhuǎn)自維基的解釋:
- 循環(huán)是一段在程序中只出現(xiàn)一次,但可能會(huì)連續(xù)運(yùn)行多次的代碼。循環(huán)中的代碼會(huì)運(yùn)行特定的次數(shù),或者是運(yùn)行到特定條件成立時(shí)結(jié)束循環(huán),或者是針對(duì)某一集合中的所有項(xiàng)目都運(yùn)行一次。
- 完整解釋移步維基百科-程序循環(huán)
python實(shí)現(xiàn)循環(huán)的方式有:
- for循環(huán)
- 它擁有一個(gè)循環(huán)計(jì)數(shù)器或是循環(huán)變數(shù)。這使得For循環(huán)能夠知道在迭代過(guò)程中的執(zhí)行順序。
- while循環(huán)
- 可以在特定條件成立時(shí)繼續(xù)循環(huán)的進(jìn)行,或是特定條件不成立時(shí)繼續(xù)循環(huán)的進(jìn)行,進(jìn)行到特定條件成立為止
這里以while循環(huán)為例,解決3層循環(huán)嵌套的進(jìn)入退出。
設(shè)置3個(gè)變量,作為3個(gè)while的條件
lay1_loop = False
lay2_loop = False
lay3_loop = False
先實(shí)現(xiàn)一個(gè)兩層循環(huán):
while not lay1_loop: #條件為真,進(jìn)入第一層while循環(huán)
print("這里是第一層循環(huán)...")
choose = input("q,退出 其他鍵繼續(xù): ").strip()
if choose == 'q':
lay1_loop = True
lay2_loop = True
else:
pass
while not lay2_loop: #條件為真,進(jìn)入第二層while循環(huán)
print("這里是第二層循環(huán)...")
choose = input("b,返回上一層 q,退出 其他鍵繼續(xù): ").strip()
if choose == 'b':
lay2_loop = True
elif choose == 'q':
lay2_loop = True
lay1_loop = True
else:
pass
改進(jìn):
這段代碼中,如果想要退出,就要同時(shí)設(shè)置lay1_loop, lay2_loop 為True。
假設(shè)循環(huán)有更多層的嵌套,相應(yīng)的就要同時(shí)更改多個(gè)變量。這樣代碼就會(huì)很容易出錯(cuò),也不夠友好。
那么既然要退出整個(gè)循環(huán),是否可以只要設(shè)lay1為True并且第二層的while
條件也為假呢?
修改后的代碼:
while not lay1_loop: #條件為真,進(jìn)入第一層while循環(huán)
print("這里是第一層循環(huán)...")
choose = input("q,退出 其他鍵進(jìn)入下一層: ").strip()
if choose == 'q':
lay1_loop = True
else:
pass
while not (lay1_loop or lay2_loop): #當(dāng)lay1為真,兩個(gè)while的條件都為False,退出循環(huán)
print("這里是第二層循環(huán)...")
choose = input("b,返回上一層 q,退出 其他鍵進(jìn)入下一層: ").strip()
if choose == 'b':
lay2_loop = True
elif choose == 'q':
lay1_loop = True
else:
pass
同理繼續(xù)添加第三次while循環(huán)。
3層嵌套
while not lay1_loop: #條件為真,進(jìn)入第一層while循環(huán)
print("這里是第一層循環(huán)...")
choose = input("q,退出 其他鍵進(jìn)入下一層: ").strip()
if choose == 'q':
lay1_loop = True
else:
pass
while not (lay1_loop or lay2_loop): #當(dāng)lay1為真,兩個(gè)while的條件都為False,退出循環(huán)
print("這里是第二層循環(huán)...")
choose = input("b,返回上一層 q,退出 其他鍵進(jìn)入下一層: ").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("這里是第三層循環(huán)...")
choose = input("b,返回上一層 q,退出: ").strip()
if choose == 'b':
lay3_loop = True
elif choose == 'q':
lay1_loop = True
小Bug:
當(dāng)進(jìn)入二層循環(huán)后:輸入b返一層循環(huán)后(lay2_loop = True),程序會(huì)卡在第一層循環(huán)中,無(wú)法再次進(jìn)入二層。因?yàn)榈诙€(gè)while的條件不成立了。
同理二層進(jìn)入三層也會(huì)碰到這個(gè)問(wèn)題。
解決:
第一層if中的pass語(yǔ)句改為 lay2_loop = False
第二層if中的pass語(yǔ)句改為 lay3_loop = False