黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

失去循環標記的Python,我這樣實現跳出外層循環

系統 2085 0

不完美的Python

自從各類Python大火,感覺天上地下哪兒都有Python的一席之地,Python功夫好啊…但python有些細節上缺少其他語言的便利。今天我們就來舉幾個例子。

跳出外層循環

大家都知道,在Java中存在標簽的概念,當我們存在多層循環時,Java可以使用標簽控制指定的循環層。舉個小栗子:

            
              public class OuterLoop {
    public static void main(String[] args) {
        outer:
        for (int i = 0; i < 5; i++) {
            inner:
            for (int j = 0; j < 5; j++) {
                System.out.println(j);
                if (j == 2) {
                    break outer;
                }
            }
        }
        System.out.println("over!");
    }
}

output:
0
1
2
over!

            
          

我們通過定義標簽,在遇到break continue等關鍵字時,可以控制指定的循環層,然而Python沒有標簽的概念,那么Python該如何實現這種功能呢?

Python循環跳出

為了方便大家理解,我們來舉一個臭不要臉的例子吧!
加入小張、我、小李三個人經常一起吃飯,吃飯就涉及付賬了,如果AA那大家都能接受,如果一個人請客,那他倆付錢我當然愿意,如果是我付錢那我吃完了就趕緊尿遁…好了,有這個前提,我們開始寫代碼吧。

定義函數實現

對于多層循環,在Python中,也許最易于理解的方式就是通過函數return來實現了。但這里要注意一個問題,函數的return會跳出所有循環,對于兩層以上的循環不適用…
?

            
              # -*- coding: utf-8 -*-
# @Author   : 王翔
# @WeChat   : King_Uranus
# @公眾號    : 清風Python
# @Date     : 2019/9/11 0:03
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : OuterLoop.py
import random

people = ['zhang', 'me', 'li']
payments = ['AA', 'stand_treat']

def dine_together():
    # 為了避免一成不變的套路,我們添加兩個列表隨機
    random.shuffle(payments)
    print(payments)
    random.shuffle(people)
    print(people)

    for payment in payments:
        for person in people:
            if payment == 'stand_treat':
                if person == 'me':
                    print("居然我請客,趕緊尿遁...")
                    people.remove('me')
                    schlemiel = random.choice(people)
                    print("倒霉孩子{}請客".format(schlemiel))
                    # 當遇到我請客,直接結束外層循環,函數返回...
                    return
                else:
                    print("今天{}請客".format(person))
            else:
                print('今天吃飯{},等下{}付錢,大家記得把錢給它...'
                      .format(payment, person))

dine_together()

output:
['stand_treat', 'AA']
['zhang', 'li', 'me']
今天zhang請客
今天li請客
居然我請客,趕緊尿遁...
倒霉孩子li請客

            
          

標記變量實現

我們可以通過定義變量值來進行判斷是否退出循環,操作如下:

            
              import random

people = ['zhang', 'me', 'li']
payments = ['AA', 'stand_treat']

# 為了避免一成不變的套路,我們添加兩個列表隨機
random.shuffle(payments)
print(payments)
random.shuffle(people)
print(people)

runaway = False
for payment in payments:
    for person in people:
        if payment == 'stand_treat':
            if person == 'me':
                print("居然我請客,趕緊尿遁...")
                people.remove('me')
                schlemiel = random.choice(people)
                print("倒霉孩子{}請客".format(schlemiel))
                # 修改標記變量
                runaway = True
                # 當遇到我請客,直接結束外層循環,函數返回...
                break
            else:
                print("今天{}請客".format(person))
        else:
            print('今天吃飯{},等下{}付錢,大家記得把錢給它...'
                  .format(payment, person))
    # 判斷標記變量
    if runaway:
        break

output:
['stand_treat', 'AA']
['li', 'me', 'zhang']
今天li請客
居然我請客,趕緊尿遁...
倒霉孩子zhang請客

            
          

for else實現

for…else…的運行邏輯是當for循環正常執行結束就會運行其else語句,如果中途break的話,就不會執行else中的內容
有失必有得,雖然python沒有循環標記,卻多出了一個for else的操作,幫助我們實現需求。

            
              import random

people = ['zhang', 'me', 'li']
payments = ['AA', 'stand_treat']

# 為了避免一成不變的套路,我們添加兩個列表隨機
random.shuffle(payments)
print(payments)
random.shuffle(people)
print(people)

for payment in payments:
    for person in people:
        if payment == 'stand_treat':
            if person == 'me':
                print("居然我請客,趕緊尿遁...")
                people.remove('me')
                schlemiel = random.choice(people)
                print("倒霉孩子{}請客".format(schlemiel))
                # 當遇到我請客,直接結束外層循環,函數返回...
                break
            else:
                print("今天{}請客".format(person))
        else:
            print('今天吃飯{},等下{}付錢,大家記得把錢給它...'
                  .format(payment, person))
    else:
        # 未出現break操作,執行else,通過continue繼續操作
        continue
    # 出現break操作,跳過else,直接外層break,結束外層循環
    break

            
          

The End

OK,今天的內容就到這里,如果覺得內容對你有所幫助,歡迎點贊。
期待你關注我的公眾號? 清風Python ,如果覺得不錯,希望能動動手指轉發給你身邊的朋友們。

作者:清風Python


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論