朋友圈的学问
对于刚刚过去的教师节,大家是否发现了点什么…凡是哪个混的风生水起,都喜欢在朋友圈里面感谢一下母校,缅怀一番师生情。那混的不好的,比如我这种苦逼IT搬砖民工,在教师节的朋友圈说说是什么样的呢?哈哈…
孟子曾说
穷则独善其身,达则兼善天下
。意思是不得志的时候就要管好自己的道德修养,得志的时候就要努力让天下人都能得到好处。所以贫穷的我就用苦荞籽庆祝这个节日,为什么说庆祝?只能说,这年头,谁还没个教师资格证了,跟谁俩呢!
不完美的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的知识文章叫醒大家!谢谢……