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印出。