Python_循環(huán)嵌套

感謝金角大王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)的方式有:

  1. for循環(huán)
    • 它擁有一個(gè)循環(huán)計(jì)數(shù)器或是循環(huán)變數(shù)。這使得For循環(huán)能夠知道在迭代過(guò)程中的執(zhí)行順序。
  2. 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

從此再也不會(huì)在嵌套循環(huán)中迷茫了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 由于文章長(zhǎng)度限制,本文作為[譯]線程編程指南(一)后續(xù)部分。 Run Loops Run loop是與線程相關(guān)的基...
    巧巧的二表哥閱讀 1,269評(píng)論 0 5
  • 第一部分 打好基礎(chǔ) Laying the Foundation 第一章 歡迎進(jìn)入軟件構(gòu)建的世界 Welcome t...
    白樺葉閱讀 4,802評(píng)論 0 17
  • 這是一篇對(duì)Run Loop開(kāi)發(fā)文檔《Threading Program Guide:Run Loops》的翻譯,來(lái)...
    鴻雁長(zhǎng)飛光不度閱讀 3,844評(píng)論 3 29
  • 本想著大學(xué)是個(gè)美好的地方,告訴自己到了大學(xué)也要好好學(xué)習(xí),多多看書(shū),多參加活動(dòng)鍛煉自己……到了大學(xué)才會(huì)發(fā)現(xiàn)自己...
    熙妍閱讀 535評(píng)論 0 1
  • 姓名:魏正君《六項(xiàng)精進(jìn)》第270期感謝2組 公司:綿陽(yáng)大北農(nóng)農(nóng)牧科技有限公司 【日精進(jìn)打卡第140天】 【知~學(xué)習(xí)...
    莫心莫肺閱讀 157評(píng)論 0 0

友情鏈接更多精彩內(nèi)容