Python的for和break循環(huán)結(jié)構(gòu)中使用else語句的技巧
在Python中的while或者for循環(huán)之后還可以有else子句,作用是for循環(huán)中if條件一直不滿足,則最后就執(zhí)行else語句。
for i in range(5): if i == 1: print 'in for' else: print 'in else' print 'after for-loop' # in for # in else # after for-loop
但我們發(fā)現(xiàn)if條件在循環(huán)的過程中成立了,最終還是執(zhí)行了else語句里的內(nèi)容,這是為什么呢?
好的,我們這時(shí)看下面這段程序:
for i in range(5): if i == 1: print 'in for' break else: print 'in else' print 'after for-loop' # in for # after for-loop
我們在if里添加了一個(gè)break,這是因?yàn)閑lse是在for后執(zhí)行的,但只有for循環(huán)正常退出時(shí)才會(huì)執(zhí)行else語句(不是由break結(jié)束循環(huán))。而當(dāng)循環(huán)是由break語句中斷時(shí),else就不被執(zhí)行。
for/else等效于下面這段代碼,可以類似C語言那樣添加一個(gè)flag:
found = False for i in range(5): if i == 1: found = True print 'in for' if not found: print 'not found' print 'after for-loop' # in for # after for-loop
與for語句相似,while語句中的else子句用法是一樣的,else塊在循環(huán)正常結(jié)束和循環(huán)條件不成立時(shí)執(zhí)行。
對于條件語句 if- else 我們已經(jīng)很熟悉了, 但是在Python中,for-else用于處理遍歷失敗。
比如我們要實(shí)現(xiàn)這樣一個(gè)功能:找出(81,99)中最大的完全平方數(shù)并輸出,找不到則輸出提示。
如果用c++的for循環(huán)實(shí)現(xiàn),必須手動(dòng)的判斷for循環(huán)是否遍歷失?。?/p>
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int i;
float n;
for(i=99;i>81;i--)
{
n=sqrt((float)i);
if(n==int(n))
{
cout<<i;
break;
}
}
if(i==81) //邊界判斷
cout<<"didn't find it!"<<endl;
return 0;
}
而用Python的for-else則可簡單的實(shí)現(xiàn)這一功能:
from math import sqrt for n in range(99,81,-1): root = sqrt(n) if root == int(root): print n break else: print"Didn't find it!"
在for循環(huán)完整完成后才執(zhí)行else;如果中途從break跳出,則連else一起跳出。
特別需要注意的是如果for中有if語句,else的縮進(jìn)一定要和for對齊,如果和if對齊,則變成if-else語句,會(huì)產(chǎn)生意想不到的錯(cuò)誤如下:
from math import sqrt for n in range(99,81,-1): root = sqrt(n) if root == int(root): print n break else: print"Didn't find it!"
雖然使用for-else節(jié)省兩行代碼同時(shí)便于閱讀,但是容易和if-else混淆。貌似實(shí)際中不會(huì)常用,反而更傾向于手動(dòng)處理。
- Python判斷素?cái)?shù)的3種方法及for-else語句的用法介紹
- Python語法糖for?else循環(huán)語句里的break使用詳解
- python入門學(xué)習(xí)關(guān)于for else的特殊特性講解
- Python中for后接else的語法使用
- python使用for...else跳出雙層嵌套循環(huán)的方法實(shí)例
- Python for循環(huán)搭配else常見問題解決
- python for和else語句趣談
- Python中在for循環(huán)中嵌套使用if和else語句的技巧
- Python中for-else循環(huán)的使用時(shí)機(jī)與注意點(diǎn)
相關(guān)文章
詳解pandas使用drop_duplicates去除DataFrame重復(fù)項(xiàng)參數(shù)
這篇文章主要介紹了詳解pandas使用drop_duplicates去除DataFrame重復(fù)項(xiàng)參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
matplotlib圖形整合之多個(gè)子圖繪制的實(shí)例代碼
matplotlib繪制多個(gè)子圖的時(shí)候,我們可以根據(jù)自己的想法去排列子圖的順序,也可以生成不同的子圖數(shù)量,本文就詳細(xì)的介紹了matplotlib 多子圖繪制,具有一定的參考價(jià)值,感興趣的可以了解一下2022-04-04
Python for Informatics 第11章之正則表達(dá)式(二)
這篇文章主要介紹了Python for Informatics 第11章 正則表達(dá)式(二)的相關(guān)資料,需要的朋友可以參考下2016-04-04
Python實(shí)現(xiàn)操作Redis所有類型的方法詳解
Redis作為一款高性能的NoSQL數(shù)據(jù)庫,越來越受到了廣大開發(fā)者的喜愛。本篇博客將介紹如何使用Python操作Redis的所有類型,以及一些高級用法,感興趣的可以了解一下2023-04-04
Python 多繼承中的一個(gè)詭異現(xiàn)象 既是 Father又是grandfather
我們知道,在面向?qū)ο缶幊汤锩?,繼承是一個(gè)很重要的概念。子類可以使用父類的方法和屬性,接下來小編將用舉例的方式為大家講解Python 多繼承中的一個(gè)詭異現(xiàn)象 其即是爸爸又是爺爺?shù)钠孑猬F(xiàn)象,感興趣的小伙伴可以看下面文章具體了解2021-09-09

