如何在Python中使用break跳出多層循環?
for a in xrange(10):
for b in xrange(20):
if something(a, b):
# Break the inner loop...
break
else:
# Continue if the inner loop wasn"t broken.
continue
# Inner loop was broken, break the outer.
break
代碼如上,看不太懂這裡的else和break的具體用法。在課本上學的都是if-else 在同一層級對應,而這裡與else同一層級的顯然是一個循環
for b in xrange(20):
請問在沒有if對應的情況下else語句的執行條件是什麼?而且與else同級的break顯然不是每次循環都會執行的,請問這裡的break是如何實現有條件執行的?
我又有些忍不住要說了……你們學python是從來不看官方文檔,只是跟著某某某中文教程一路擼下去的么?
Python的循環體自己就有else分支!
Python的循環體自己就有else分支!Python的循環體自己就有else分支!不只是if有,while和for都有else分支。循環體的else分支觸發條件是循環正常結束。如果循環內被break跳出,就不執行else。所以這個邏輯是:如果循環內break了,不觸發else,則執行下一句外層循環中的break;如果正常結束,執行else分支里的continue,直接跳轉到外層循環的下一輪,跳過了第二個break。
不過這寫法真尼瑪丑啊……搞個布爾量會死么……
————————
其實感覺比較正確的姿勢應該是拿個函數包起來然後用return……for和while的else子句用於循環後處理,僅在循環正常結束時執行。
問題中所舉的例子,設置一個flag變數,代碼看起來會更直觀一些。
難說哪種寫法好,我倒挺喜歡用else分支的。
拋個異常外面接著不就完了
break two for loops
利用全局變數,這樣就算3個for或者4個for都是一樣的
哈哈 剛剛解決這個問題。。。多重循環跳出,用return~要不立個flag也行~
【備忘】Python中斷多重循環的幾種思路 - 科學空間|Scientific Spaces這裡可以參考一下
我用專欄里的一篇文章來答題。
專欄鏈接:給妹子講python,歡迎大家關注,提意見!
全面的介紹一下這裡面的語法點吧,主要涉及的就是continue,break和else三個關鍵字
continue是跳出本輪循環,回到循環主體的頂部再次開始新的循環
a = 0
b = 10
while a &< b:
a = a + 1
if a % 2 != 0:
continue
print(a, end=" ")
2 4 6 8 10
break是直接跳出循環
a = 0
b = 10
while a &< b:
a = a + 1
if a == 5:
break
print(a, end=" ")
1 2 3 4
else關鍵字,只有當循環正常離開的時候才會執行,即沒有碰到break語句
y = 33
x = y // 2
while x &> 1:
if y % x == 0:
print("{} has a factor {}".format(y,x))
break
x = x - 1
else:
print("{} is prime".format(y))
33 has a factor 11
我們可以看出,如果y不是質數,就會執行到break語句,從而跳過else語句,不執行else語句
如果是一個質數,就不會運行到break語句,循環正常退出的話,就執行else語句
y = 29
x = y // 2
while x &> 1:
if y % x == 0:
print("{} has a factor {}".format(y,x))
break
x = x - 1
else:
print("{} is prime".format(y))
29 is prime
謝謝,學習了啊!
推薦閱讀:
※清華電機系和計算機系怎麼選擇?
※如何理解 C++ 中 int *i 的聲明方式?
※精通 Python 是一種怎樣的體驗?
※微軟辦公軟體國際認證(MOS)有用嗎?