不完美的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 break跳出外层_失去循环标记的Python,我这样实现跳出外层循环相关推荐

  1. python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析

    Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...

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

    不完美的Python 自从各类Python大火,感觉天上地下哪儿都有Python的一席之地,Python功夫好啊-但python有些细节上缺少其他语言的便利.今天我们就来举几个例子. 跳出外层循环 大 ...

  3. python实现关联算法_【原创】利用python实现apriori关联算法并分析挖掘数据

    原博文 2018-12-25 18:43 − # -*- coding: utf-8 -*- import json # Aprior算法 def loadDataSet(): '''创建一个用于测试 ...

  4. python代码编写工具_编写更好的Python代码的终极指南

    python代码编写工具 Despite its 尽管它 downsides, Python remains the king of today's programming world. Its ve ...

  5. python项目实战干货_干货 | 这4个Python实战项目,让你瞬间读懂Python!

    Python是一种极具可读性和通用性的编程语言.Python这个名字的灵感来自于英国喜剧团体Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣.Python易于设置, ...

  6. python数据分析模块包括_数据开发必会 | Python数据分析模块

    作为数据开发,Python强大的数据分析模块还是必须要会的,横向拓展数据分析与挖掘技术栈也是很有必要的.本文将对Pandas.NumPy.SciPy.Matplotlib等分析挖掘库的安装和使用进行简 ...

  7. python考试怎么过_面试问题整理之python测试

    本文搜集.整理了python测试岗位面试常见问题. 1.下列哪个语句在Python中是非法的? A.x = y = z =1 B.x = (y = z 1) C.x, y = y, x D.x = y ...

  8. python是一门面向_如何系统地自学一门Python 语言

    零基础情况下,学一门语言充实下自己,Python,简洁.优美.容易使用,是一个很好的选择.那么如何系统地自学Python呢? 有的人非常想学好Python,一方面被琐事纠缠,一直没能动手,另一方面,担 ...

  9. 有没有可以刷python题的软件_你想要的Python面试都在这里了【315+道题】

    第一部分 Python基础篇(80题) 1.为什么学习Python? 1.python是脚本语言,作为程序员至少应该掌握一本通用脚本语言,因为脚本语言与编译语言的开发测试过程不同,可以极大的提高编程效 ...

最新文章

  1. Linux 帧缓存 数据,linux--帧缓存技术
  2. 面板什么都看不到 unity_杨幂今年第一封太敷衍!最新大片不露脸不秀身材,什么都看不到...
  3. 设计模式:单例模式之枚举
  4. 【合并区间】排序 + 双指针
  5. 第一次小班课(英语)
  6. jquery获取html文件大小,jQuery获取file表单选择文件的路径、名字、大小、类型_忘却_前端开发者...
  7. 【JAVA 第三章 流程控制语句】课后习题 计算两个日期之间的天数
  8. linux7配置静态地址,Centos7 配置静态 IP 地址的方法
  9. 数据结构Java版之查找算法(三)
  10. C4D模型库!你想要的模型这里都有
  11. day11函数的进阶动态参数,命名空间,作用域,第一类对象
  12. iOS应用开发模板 iOS Boilerplate
  13. 现浇板用弹性计算方法_自建房砖混结构现浇楼板配筋的要求和计算方法
  14. python: 大规模数据集的读存技巧
  15. Thinkpad T410i-2516A21 安装Ubuntu10.0.4记录
  16. SpringBoot整合Docker实现一次构建到处运行
  17. 如何在Jetson NANO上安装无线WIFI模块
  18. linux网卡命名规则及修改ip地址
  19. 特征频率、最y大振荡频率、截止频率有什么关系和异同
  20. 计算机视觉 图像处理_通过图像处理找到计算机视觉通道

热门文章

  1. 集群部署中解决定时任务重复执行的问题-redis分布式锁应用
  2. o.s.b.d.LoggingFailureAnalysisReporter
  3. 2003服务器远程桌面连不上解决办法
  4. bootstrapTable基础操作
  5. [Swift]LeetCode482. 密钥格式化 | License Key Formatting
  6. 201521123014 《Java程序设计》第11周学习总结
  7. Mysql group by 问题
  8. 好文推荐系列--------(3)GruntJS 在线重载 提升生产率至新境界
  9. 包含对流环热,热流边界,等温边界的稳态热传导方程的FEM求解。
  10. 总结DevExpress10个使用技巧