Python 自學第五天:if 判斷式、for 迴圈和 while 迴圈
Python 不像其他的程式語言,使用 {}
表示包圍住的範圍是一個區塊。Python 的特色是使用縮排來表示區塊。因此在 if 判斷式、for 迴圈、while 迴圈和定義函式時,縮排就非常重要。
判斷式
當判斷的結果為真時,執行 A 區塊的程式碼。當判斷的結果為假時,執行 B 區塊的程式碼。
if 判斷式
如何使用 if 判斷式來控制流程?語法如下:
1 | if 判斷式: # 記得加冒號 : |
if 和 else 該行結尾記得加冒號 :
。
程式語言中,判斷式是使用 >
、>=
、<=
、<
、==
和 !=
比較運算子,來比較左右兩邊的值。比較完的結果,使用布林值的 True
或 False
表示。
注意,在程式中一個等號 =
表示將右邊的值賦予左邊的變數。
兩個等號 ==
表示判斷左邊的值是否等於右邊的值,例:
1 | a, b = 1, 3 # 為多個變數依序賦值 |
直接看例子:
從 2-5 行是一個 if-else 區塊
。程式會先執行 if 區塊
的第一行,判斷 x 的值是否小於 10。
- 如果 x 的值真的小於 10,判斷結果為布林值
True
,則執行if 區塊
裡面的程式碼,執行完畢後,跳過else 區塊
,結束整個if-else 區塊
。 - 如果 x 的值沒有小於 10,判斷結果為布林值
False
,則跳過if 區塊
的程式碼,進入else 區塊
,執行裡面的程式碼,執行完畢後,結束整個if-else 區塊
。
因此上圖中,因為 x = 5
,判斷結果為 True
,則執行 if 區塊
中的程式碼,最後輸出 x 小於 10, x = 5
。
試試看,修改一下 x
的大小。
如果 x = 10
,判斷結果為 False
,則執行 else 區塊
中的程式碼,最後輸出 x 大於或等於 10, x = 10
,如下圖:
如果 x = 20
,判斷結果為 False
,則執行 else 區塊
中的程式碼,最後輸出 x 大於或等於 10, x = 20
,如下圖:
另外還有這種寫法:
1 | if 判斷式 1: |
if、elif 和 else 該行結尾記得加冒號 :
。
在所有 if 判斷式中,最後的 else 區塊
都可以不加,表示當所有的判斷式都為 False
時,不執行任何程式碼,結束 if 判斷式。
switch 判斷式
Python 3 目前沒有 switch 判斷式。
迴圈
使用者可以運用簡單幾行的語法,使該區塊程式碼重複執行多次。
for 迴圈
for 迴圈
中會有一個 變數
,依序是列表中的元素或字串裡的字母,疊代完畢後結束 for 迴圈
。
1 | for 變數 in 列表或字串: # 記得加冒號 : |
例如:
1 | for x in ["Java", "C++", "JS", "Python"]: |
1-2 行是一個 for 迴圈區塊
。程式會先執行 for 區塊
的第一行,讓 x = "Java"
,然後執行區塊中的程式碼。結束後,再回到 for 區塊
的第一行,讓 x = 下一個資料
,再執行區塊中的程式碼。直到列表最後一個元素,並且結束 for 迴圈區塊
。
我們也經常會使用 range()
這個函式,產生一連串的數字列表。
1 | range(6) # 產生 0~6(不包含) 的列表 [0, 1, 2, 3, 4, 5] |
可以寫成這樣:
1 | sum = 0 |
使用 range(11)
產生 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
列表,計算 1~10 的總和。程式執行步驟如下:
- 程式從
for 區塊
第一行 (line 2) 開始,i = 0
。 - 執行 line 3 程式,
sum + i = 0 + 0 = 0
指派給左邊的變數sum
,此時sum
的值從0
變成0
。第一次for 區塊
結束。 - 回到 line 2,
i = 1
。 - 執行 line 3,
sum + i = 0 + 1 = 1
指派給左邊的變數sum
,此時sum
的值從0
變成1
。第二次for 區塊
結束。 - 回到 line 2,
i = 2
。 - 執行 line 3,
sum + i = 1 + 2 = 3
指派給左邊的變數sum
,此時sum
的值從1
變成3
。第三次for 區塊
結束。
…重複多次後
- 回到 line 2,
i = 10
。 - 執行 line 3,
sum + i = 45 + 10 = 55
指派給左邊的變數sum
,此時sum
的值從45
變成55
。第十一次for 區塊
結束。 for 迴圈
結束。印出sum
的值。
while 迴圈
當判斷的結果為真時,就會重複執行程式碼,直到判斷的結果為假時,結束 while 迴圈
。
1 | # 通常會在 while 上方,給判斷式中的變數一個初始值 |
設計迴圈時,要讓判斷式有出現 False
的機會,否則會進入無窮迴圈,程式無法停止。
上面計算 1~10 總和的語法,也可以表達成如下:
1 | i = 0 |
每執行一次 while 區塊
,i
都會遞增,並且在下一輪時,與 sum
相加,直到 i = 11
時,判斷式結果為 False
,結束 while 迴圈
。印出 sum
的值。
do-while 迴圈
Python 3 目前沒有 do-while 迴圈。
break、continue 的使用
break
出現在迴圈的區塊裡時,表示強制結束迴圈。
continue
出現在迴圈的區塊裡時,表示強制結束該次迴圈,不執行剩下的程式碼,重新開始新的一輪。
如下的程式碼中,break
寫在 line 4~8 的 while 迴圈
中,當 break
被執行時,強制結束 line 4~8 這個 while 迴圈
,執行第十行 print(sum)
:
1 | i = 0 |
如下的程式碼中,continue
寫在 line 4~9 的 while 迴圈
中,當 continue
被執行時,強制結束剩下的程式碼 (line 8~9) ,進入新的一輪 while 迴圈判斷
:
1 | i = 0 |
break 搭配 else 的使用
通常使用 break
時,迴圈可以搭配 else
使用:
- 如果
break
被執行時,強制結束 line 4~11 這個while 迴圈
,不會進入else 區塊
執行程式。
1 | i = 0 |
- 如果是一般正常結束迴圈,如下,
i = 10
時while 判斷式為 False
,迴圈正常結束,會進入else 區塊
執行程式。
1 | i = 0 |
參考資料:
彭彭的課程:Python 流程控制 - if 判斷式
彭彭的課程:Python 流程控制 - 迴圈基礎,while 迴圈、for 迴圈
彭彭的課程:Python 流程控制 - 迴圈進階控制,break、continue、else 命令