朋友圈的學問
對于剛剛過去的教師節,大家是否發現了點什么…凡是哪個混的風生水起,都喜歡在朋友圈里面感謝一下母校,緬懷一番師生情。那混的不好的,比如我這種苦逼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的知識文章叫醒大家!謝謝……
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
