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

不完美的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,如果觉得不错,希望能动动手指转发给你身边的朋友们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值