官术网_书友最值得收藏!

3.2 循環(huán)結(jié)構(gòu)

Python的循環(huán)結(jié)構(gòu)有兩個關(guān)鍵字可以實現(xiàn),分別是while和for。

3.2.1 While循環(huán)

while循環(huán)的常見語法是:

這個代碼塊表達的含義就是,如果條件滿足就執(zhí)行代碼塊,直到條件不滿足為止;如果條件一開始不滿足,那么代碼塊一次都不會被執(zhí)行。

我們看一個例子:

運行這段代碼可以得到輸出如下:

對于while循環(huán),其實和if語句的執(zhí)行結(jié)構(gòu)非常接近,區(qū)別就是從單次執(zhí)行變成了反復(fù)執(zhí)行,以及條件除了用來判斷是否進入代碼塊以外,還被用來判斷是否終止循環(huán)。

對于上面這段代碼,結(jié)合輸出不難看出,前五次循環(huán)的時候a<5為真,因此循環(huán)繼續(xù),而第六次經(jīng)過的時候,a已經(jīng)變成了5,條件就為假,自然也就跳出了while循環(huán)。

3.2.2 For循環(huán)

for循環(huán)的常見語法是:

Python的for循環(huán)比較特殊,它并不是C系語言中常見的for語句,而是一種foreach(其他語言中用于遍歷迭代對象的語法)的語法,也就是說本質(zhì)上是遍歷一個可迭代的對象,這聽起來實在是太抽象了,我們看一個例子:

運行后這段代碼輸出如下:

for循環(huán)實際上用到了迭代器的知識,但是在這里展開還為時尚早,我們只要知道用range配合for可以寫出一個循環(huán)即可,比如計算整數(shù)0~100的和:

那如果想計算整數(shù)50~100的和呢?實際上range產(chǎn)生區(qū)間的左邊界也是可以設(shè)置的,只要多傳入一個參數(shù):

有時候我們希望循環(huán)是倒序的,比如從10循環(huán)到1,那該怎么寫呢?只要再多傳入一個參數(shù)作為步長即可:

也就是說range的完整用法應(yīng)該是range(start,end,step),循環(huán)變量i從start開始,每次循環(huán)后i增加step,直到超過end跳出循環(huán)。

3.2.3 兩種循環(huán)的轉(zhuǎn)換

其實無論是while循環(huán)還是for循環(huán),本質(zhì)上都是反復(fù)執(zhí)行一段代碼,這就意味著二者是可以相互轉(zhuǎn)換的,比如之前計算整數(shù)0~100的代碼,也可以用while循環(huán)完成,如下所示:

但是這樣寫之后至少存在三個問題:

● while寫法中的條件為i<=100,而for寫法是通過range( )來迭代,相比來說后者顯然更具可讀性。

● while寫法中需要在外面創(chuàng)建一個臨時的變量i,這個變量在循環(huán)結(jié)束依舊可以訪問,但是for寫法中i只有在循環(huán)體中可見,明顯while寫法增添了不必要的變量。

● 代碼量增加了兩行。

當(dāng)然這個問題是辯證性的,有時候while寫法可能是更優(yōu)解,但是對于Python來說,大多時候推薦使用for這種可讀性強也更優(yōu)美的代碼。

主站蜘蛛池模板: 延津县| 芮城县| 灵山县| 湖北省| 安岳县| 睢宁县| 防城港市| 阿克| 乌兰浩特市| 南部县| 汉沽区| 宜兰县| 天长市| 正宁县| 抚松县| 河津市| 浮山县| 花垣县| 深水埗区| 西青区| 石屏县| 临西县| 嘉禾县| 宁海县| 南涧| 平舆县| 江阴市| 西乌珠穆沁旗| 玉田县| 仁寿县| 龙陵县| 吉水县| 玛曲县| 沐川县| 晋宁县| 科技| 宁乡县| 甘谷县| 沙河市| 榆树市| 彭泽县|