簡介
經過上一篇介紹基礎的for-loop後,這篇再講講巢狀迴圈以及while迴圈,而上片介紹的for-loop會判斷序列的數量而執行該數量次數,但是我們想要中途停止,透過條件判斷隨時終止for-loop,在這篇也會講一下在python中怎樣實作。
巢狀迴圈
巢狀迴圈,顧名思義就是一層一層的建築起來,像鳥巢一樣,所以我們所看到的loop就不僅僅只有一層。但通常最常使用到的就是兩層,分內層與外層,我們直接看程式碼再來逐一解釋,我們就來做一個99乘法表,透過巢狀迴圈來實現。
for i in range(1, 10):
for j in range(1, 10):
print(i*j)
大家可以直接複製程式碼到你的Jupyter看看結果,印出來長長的一串,我們先從外層代表的數『 i 』來看,當『 i = 1 』時會進入他執行階段,進門後看到還有一個for-loop代表數『 j 』,看到沒門了就執行『 j 』依序列的『 1-9 』逐步執行,結束後再從序列『 i = 2 』繼續執行,直到『 i = 9 』執行完後,整個迴圈才真正結束。
而我們要解決一下印出來一長串的效果,雖然是題外話但可以講一下,可以看到上圖,透過『 \t 』來將同行的每個數字中間加上一個『tab』,就像是電腦自動幫你按下tab按鍵。而在內層for-loop加上判斷是來看是不是執行到最後一個序列在進行換行,否則是按下tab鍵,在print後面加上『 end = ”』讓程式執行換行。
While迴圈
while-loop也是非常常用的迴圈方式,有別於for-loop是透過序列並執行序列數量來執行迴圈的次數,而while-loop則是透過條件來執行回圈。
while condition:
statement
可以看到上方介紹的while-loop結構,在『 while 』後方接上判斷式,假使符合條件則執行,再來看到上圖執行結果,透過簡單的範例來介紹,先設定一個變數『 x 』並給予他數值,讓他到while-loop來印出數字,每個數字都加倍呈現,可以看到他只印到80,因為判斷式條件限制是『 < 100 』,所以他跑到第五次回圈時他就已經中止了。
而大家會有些疑問,跑五次不是也會印出100嗎,原因就是print的位置,當結束第四次進入第五次時,會先印出第四次的值,在下一行才會進行第五次的乘法,所以第五次的值160是不會被印出的。
Break & Continue
迴圈假如要終止,或是要再繼續執行就要透過這兩個方法,由於for & while – loop都可以使用上這兩種方法,所以擺到最後來說。常理來說迴圈的結束分為規則的結束和不規則的結束:
1.規則的結束方式是當迴圈的判斷條件不再符合時,迴圈自然結束
2.不規則的迴圈結束則是在迴圈自然結束前,我們已經得到想要的運算結果,利用強制中斷的方式來結束迴圈。
Break : 意思就是強制終止迴圈,Continue:不會讓迴圈結束;只跳過迴圈內 continue 後面的剩餘敘述,接著繼續執行下一次的迴圈運作。
講這麼多,不如先來看看for-loop怎樣穿插這兩個方法:
先看到for-loop+break,當要執行回圈十次時,再回圈內插入一個判斷式,假如跑到第幾次時就終止回圈,所以可以看到印出來的數值只到7,接著我們再看看for-loop+continue。
可以看到印出來的數值沒有8,因為判斷式中指定8不要印並跳過他繼續執行回圈,如此一來在for-loop就知道要怎樣用了。而這些方法會用在哪些地方呢?例如你要印出某個月每天餐費,但假日不要印,這樣就可以用到continue。另一個狀況則是我要印出前100位的會員資料,這時就可以用break。
換到while-loop+break,其實跟for-loop一樣,透過判斷式來下break指令,上圖是當n>0就可以執行該while-loop,而每執行一次則n數值會減1,當n數值為2時就終止loop,且2也不會被印出。
while-loop+continue也是一樣,他只會跳過執行到數值為2的判斷,後續接著執行。
小結
python的迴圈就差不多告一段落了,技多不壓身,雖然part1可能就夠用了,但我們可以多多了解程式的運作與有一些可以變換之處,來因應更多的需求。