python break跳出外层_失去循环标记的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,如果覺得不錯,希望能動動手指轉發給你身邊的朋友們。
更多精彩內容,請滑至頂部點擊右上角關注小宅哦~
總結
以上是生活随笔為你收集整理的python break跳出外层_失去循环标记的Python,我这样实现跳出外层循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react --- 复合组件,传递属性
- 下一篇: react --- Hook的使用