失去循环标记的Python,我这样实现跳出外层循环

系统 1354 0
朋友圈的学问

对于刚刚过去的教师节,大家是否发现了点什么…凡是哪个混的风生水起,都喜欢在朋友圈里面感谢一下母校,缅怀一番师生情。那混的不好的,比如我这种苦逼IT搬砖民工,在教师节的朋友圈说说是什么样的呢?哈哈…
失去循环标记的Python,我这样实现跳出外层循环_第1张图片

孟子曾说 穷则独善其身,达则兼善天下 。意思是不得志的时候就要管好自己的道德修养,得志的时候就要努力让天下人都能得到好处。所以贫穷的我就用苦荞籽庆祝这个节日,为什么说庆祝?只能说,这年头,谁还没个教师资格证了,跟谁俩呢!
失去循环标记的Python,我这样实现跳出外层循环_第2张图片

不完美的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 ,如果觉得不错,希望能动动手指转发给你身边的朋友们。
希望每周一至五清晨的7点10分,都能让清风Python的知识文章叫醒大家!谢谢……
失去循环标记的Python,我这样实现跳出外层循环_第3张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论