for迴圈
for 是另一種常用的迴圈,語法與前面學過的 if 和 while 較為不同,讓我們改寫一個前面提過的例子來看看它的語法:
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
print(i)
print('finish!')
for 的用法是在後面緊接一個 變數名稱,然後接一個 in;再來會是一個 可迭代的物件,例如前一個章節所學的 list,待會就會提到的 range,還有之後的 dictionary 和 tuple 等等;當然,別忘了還是要加一個 :!
其中所謂的可迭代物件,就是指我們可以依序將此物件裡的元素一個一個取出來,而for迴圈就是根據可迭代物件裡的元素,重複進行for迴圈中有縮排的程式碼;直到可迭代物件迭代完畢後,迴圈便結束。
因此上述這段程式碼做的事情就是:第一回合i=0,因此印出 0;第二回合i=1,因此印出 1;第三回合i=2,因此印出 2;...;直到印完 9 之後,迴圈結束,繼續往下執行迴圈外的程式碼,因此印出 finish!。
程式執行結果如下:
0
1
2
3
4
5
6
7
8
9
finish!
break, continue
break 和 continue 在for迴圈和while迴圈的用法相同,使用時機一樣是在需要「打斷迴圈」和「跳過某一回合」時,也經常會與 if 搭配使用。
以下舉一個經典的質數判斷和改寫的例子,讓大家熟悉他們的用法:
n = int(input())
if n < 2:
print('invalid')
else:
for i in range(2, n):
if n % i == 0:
print('composite number')
break
else:
print('prime number')
- 前三行是確保使用者輸入一個大於1的正整數,如果n大於1就會進入
else的區塊開始執行for迴圈。 range稍後就會做詳細的介紹,在這裡range(2, n)的意思就是2~n-1之間的整數序列,因此i會依序迭代序列裡的值,並執行下三行有縮排的區塊。- for迴圈裡執行的程式碼則是在檢查2~n-1之間有沒有可以整除n的數字,如果有,便會印出
composite number,並跳出迴圈。 - 而這裡有一個特別的用法,我們可以發現
else除了可以和if搭配使用外,其實也可以跟迴圈(while、for)搭配:唯有當迴圈是正常地循環完畢時(也就是非透過break中斷迴圈),才會執行else的區塊。因此若當迴圈檢查完2~n-1沒有可以整除n的數字時,就能夠順利完成所有迭代,因此就會進入else,印出prime number。
for i in range(1, 51):
if i % 2 == 0:
continue
elif i % 3 == 0:
continue
print(i)
此段程式碼則是改寫前面在 while 提過的例子,range(1, 51) 代表1~50的整數序列,因此for迴圈會使i從1迭代到50,依序檢查i是否為2或3的倍數,若成立,則會利用 continue 跳過該回合,繼續進行下一次的判斷;若否,才能執行完迴圈中剩下的程式碼(最後一行),將i印出。