不完美的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

失去循环标记的Python,我这样实现跳出外层循环的更多相关文章

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

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

  2. 让break跳出外层循环的方法

    demo //在里层循环里面,想办法让外层循环的条件不成立,就可以控制外层循环结束. for(var i = 0 ; i < 10; i++){ alert(i) for(var j = 0 ; ...

  3. JS基础_break跳出外层循环

    可以为循环语句创建一个label,来表示当前循环 label:循环语句 使用break语句时,可以在break后跟着一个label 这样break会结束指定的循环 outer: for(let i=0 ...

  4. Python练习-一个Break跳出所有循环

    Alex大神的需求:三层循环,在最内层循环中使用break,让所有循环结束; # 编辑者:闫龙 i=1; count=0; while 1==i : while 1==i: while 1==i: c ...

  5. Java中利用标签跳出外层循环break

    直接看代码: class ForLoop{ public static void main(String[] args){ //jump from outer loop outer:for(int i ...

  6. 【Python】解析Python中的条件语句和循环语句

    1.if语句 if语句有好几种格式,比如: if condition: statement 使用 if ... else ...: if condition: statement(1) else: s ...

  7. python入门:CONTINUE 的作用 跳出本次循环后,重新开始循环

    #!/usr/bin/env python # -*- coding:utf-8 -*- # CONTINUE 的作用 跳出本次循环后,重新开始循环 import time while True: ' ...

  8. Java跳出多重循环的方法

    我们一般用break和cuntinue来控制单个循环,但是如果遇到有多个循环的情况呢,比如下面这个: for (int i=0; i<10; i++) { for (int j=0; j< ...

  9. java outterLoop跳出多重循环用法以及详解

    List<CommResultMsg> listresult=new ArrayList<CommResultMsg>(); outterLoop :for (int i = ...

随机推荐

  1. Asp.net Core 系列之--1.事件驱动初探:简单事件总线实现(SimpleEventBus)

    ChuanGoing 2019-08-06  前言 开篇之前,简单说明下随笔原因.在园子里游荡了好久,期间也起过要写一些关于.NET的随笔,因各种原因未能付诸实现. 前段时间拜读daxnet的系列文章 ...

  2. 安装Windows和Ubuntu双系统--Ubuntu安装过程识别不了硬盘

    Linux识别不了固态硬盘 安装过程: 自己本身的是Windows 10,一块125g 固态 ,一块1T的机械硬盘. 通过rufus 制作ubuntu的启动盘 在BIOS中关闭电脑的安全启动选项,并且 ...

  3. 淘宝小练习#css

    * { margin: 0; padding: 0; } a { text-decoration: none; } .box { background: #f4f4f4; } /* 头部样式STAR ...

  4. 必知必会的JavaJDK工具

    JDK中有很多用于监控诊断的系统工具,对于Java程序员来说,无疑是用来了解自己程序运行时性能好坏的强大工具. 在JDK的bin目录下就可以找到这些工具. JPS 在Linux有一个命令叫做ps,可以 ...

  5. Bootstrap——导航条(navbar)

    导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多. 导航条(navbar)中有一个背景色.而且导航条可以是纯链接(类似导航).表单以及表单和导航一起结合等多种形式. 在制作一个基 ...

  6. 【评测机】评测时报错cc1plus: fatal error: /xx/xx/main.cpp: Permission denied compilation terminated.的解决方法

    事情是这亚子发生的,原本建立评测机的时候就出现过这个问题,但莫名其妙就解决了. 报错的文件路径是位于docker内的,所以本质上这个错误是docker内的没有权限执行相关文件. 原因是centos7中 ...

  7. libwebsocket协议切换状态机

    libwebsocket为连接(connection)定义了一组状态机-lws_connection_states,通过状态机我们来看libwebsocket如何实现协议的切换.除了lws_conne ...

  8. echarts绘制彩虹色背景

    大致成品如图所示 关键的步骤: var dom = document.getElementById("myChart"); var myChart = echarts.init(d ...

  9. 使用Publisher2016快速给图片添加水印

    打开Publisher,根据图片大小及形状选择空白页面大小,此处选择纵向: 点击图标选择图片: 点击绘制文本框: 在文本框中编辑水印内容,对文字大小.字体.颜色进行调整,此处将水印颜色调整为灰色,拖动 ...

  10. C语言之路

    C 简介 C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的.C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现. 在 1978 ...