Python 自學第五天:if 判斷式、for 迴圈和 while 迴圈

Python 不像其他的程式語言,使用 {} 表示包圍住的範圍是一個區塊。Python 的特色是使用縮排來表示區塊。因此在 if 判斷式for 迴圈while 迴圈定義函式時,縮排就非常重要。

判斷式

當判斷的結果為時,執行 A 區塊的程式碼。當判斷的結果為時,執行 B 區塊的程式碼。

if 判斷式

如何使用 if 判斷式來控制流程?語法如下:

1
2
3
4
5
6
if 判斷式: # 記得加冒號 :
# 如果判斷式為 True,會執行此區塊的程式碼
# ...
else: # 記得加冒號 :
# 如果判斷式為 False,會執行此區塊的程式碼
# ...

if 和 else 該行結尾記得加冒號 :

程式語言中,判斷式是使用 >>=<=<==!= 比較運算子,來比較左右兩邊的值。比較完的結果,使用布林值的 TrueFalse 表示。

注意,在程式中一個等號 = 表示將右邊的值賦予左邊的變數
兩個等號 == 表示判斷左邊的值是否等於右邊的值,例:

1
2
3
a, b = 1, 3 # 為多個變數依序賦值
print(a == b)
# False # 因為 a 不等於 b

直接看例子:

從 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
2
3
4
5
6
7
8
9
10
11
12
13
14
if 判斷式 1:
# 判斷式 1 為 True
# 會執行此區塊的程式碼
elif 判斷式 2:
# 判斷式 1 為 False
# 判斷式 2 為 True
# 會執行此區塊的程式碼
elif 判斷式 3:
# 判斷式 1~2 為 False
# 判斷式 3 為 True
# 會執行此區塊的程式碼
else:
# 判斷式 1~3 為 False
# 會執行此區塊的程式碼

if、elif 和 else 該行結尾記得加冒號 :

在所有 if 判斷式中,最後的 else 區塊 都可以不加,表示當所有的判斷式都為 False 時,不執行任何程式碼,結束 if 判斷式。

switch 判斷式

Python 3 目前沒有 switch 判斷式。

迴圈

使用者可以運用簡單幾行的語法,使該區塊程式碼重複執行多次

for 迴圈

for 迴圈 中會有一個 變數依序列表中的元素字串裡的字母,疊代完畢後結束 for 迴圈

1
2
3
for 變數 in 列表或字串:    # 記得加冒號 :
# 執行此區塊的程式碼
# ...

例如:

1
2
3
4
5
6
7
8
for x in ["Java", "C++", "JS", "Python"]:
print(f"I will use {x}")

# 輸出結果:
# I will use Java
# I will use C++
# I will use JS
# I will use Python

1-2 行是一個 for 迴圈區塊。程式會先執行 for 區塊 的第一行,讓 x = "Java",然後執行區塊中的程式碼。結束後,再回到 for 區塊 的第一行,讓 x = 下一個資料,再執行區塊中的程式碼。直到列表最後一個元素,並且結束 for 迴圈區塊

我們也經常會使用 range() 這個函式,產生一連串的數字列表。

1
2
3
range(6)          # 產生 0~6(不包含) 的列表 [0, 1, 2, 3, 4, 5]
range(5, 10) # 產生 5~10(不包含) 的列表 [5, 6, 7, 8, 9]
range(1, 25, 3) # 產生 1~25(不包含),間隔為 3 的列表 [1, 4, 7, 10, 13, 16, 19, 22]

可以寫成這樣:

1
2
3
4
5
6
sum = 0
for i in range(11):
sum = sum + i
print(sum)

# 55 # 0+1+2+...+9+10 = 55

使用 range(11) 產生 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 列表,計算 1~10 的總和。程式執行步驟如下:

  1. 程式從 for 區塊 第一行 (line 2) 開始,i = 0
  2. 執行 line 3 程式,sum + i = 0 + 0 = 0 指派給左邊的變數 sum,此時 sum 的值從 0 變成 0。第一次 for 區塊 結束。
  3. 回到 line 2,i = 1
  4. 執行 line 3,sum + i = 0 + 1 = 1 指派給左邊的變數 sum,此時 sum 的值從 0 變成 1。第二次 for 區塊 結束。
  5. 回到 line 2,i = 2
  6. 執行 line 3,sum + i = 1 + 2 = 3 指派給左邊的變數 sum,此時 sum 的值從 1 變成 3。第三次 for 區塊 結束。

…重複多次後

  1. 回到 line 2,i = 10
  2. 執行 line 3,sum + i = 45 + 10 = 55 指派給左邊的變數 sum,此時 sum 的值從 45 變成 55。第十一次 for 區塊 結束。
  3. for 迴圈 結束。印出 sum 的值。

while 迴圈

當判斷的結果為時,就會重複執行程式碼,直到判斷的結果為時,結束 while 迴圈

1
2
3
4
# 通常會在 while 上方,給判斷式中的變數一個初始值
while 判斷式: # 記得加冒號 :
# 判斷式為 True,會執行此區塊的程式碼
# 對判斷式中的變數,做一些修改

設計迴圈時,要讓判斷式有出現 False 的機會,否則會進入無窮迴圈,程式無法停止。

上面計算 1~10 總和的語法,也可以表達成如下:

1
2
3
4
5
6
7
8
i = 0
sum = 0
while i <= 10:
sum = sum + i
i = i + 1
print(sum)

# 55

每執行一次 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
2
3
4
5
6
7
8
9
10
11
12
i = 0
sum = 0

while i <= 10:
if i == 5: # 當 i 的值為 5 時
break # 結束 break 外層的這個迴圈
sum = sum + i
i = i + 1

print(sum)

# 10 # 0+1+2+3+4 = 10

如下的程式碼中,continue 寫在 line 4~9 的 while 迴圈 中,當 continue 被執行時,強制結束剩下的程式碼 (line 8~9) ,進入新的一輪 while 迴圈判斷

1
2
3
4
5
6
7
8
9
10
11
12
13
i = 0
sum = 0

while i <= 10:
if i % 2 == 0: # 當 i 是偶數時 (i 除以 2 的餘數為 0)
i = i + 1 # i 加 1
continue # 結束該次迴圈,重新開始新的一輪
sum = sum + i
i = i + 1

print(sum)

# 25 # 0+1+3+5+7+9 = 25

break 搭配 else 的使用

通常使用 break 時,迴圈可以搭配 else 使用:

  • 如果 break 被執行時,強制結束 line 4~11 這個 while 迴圈,不會進入 else 區塊 執行程式。
1
2
3
4
5
6
7
8
9
10
11
12
13
i = 0
sum = 0

while i <= 10:
if i == 5: # 當 i 的值為 5 時
print(f"i = 5 時結束迴圈。sum = {sum}")
break # 結束 break 外層 line 4~11 這個迴圈
sum = sum + i
i = i + 1
else:
print(f"i = 10 時結束迴圈。sum = {sum}")

# 10 # 0+1+2+3+4 = 10
  • 如果是一般正常結束迴圈,如下,i = 10while 判斷式為 False,迴圈正常結束,會進入 else 區塊 執行程式。
1
2
3
4
5
6
7
8
9
10
11
12
13
i = 0
sum = 0

while i <= 10:
if i == 25: # 當 i 的值為 25 時
print(f"i = 25 時結束迴圈。sum = {sum}")
break # 結束 break 外層 line 4~11 這個迴圈
sum = sum + i
i = i + 1
else:
print(f"i = 10 時結束迴圈。sum = {sum}")

# 55 # 0+1+2+...+9+10 = 55

參考資料:
彭彭的課程:Python 流程控制 - if 判斷式
彭彭的課程:Python 流程控制 - 迴圈基礎,while 迴圈、for 迴圈
彭彭的課程:Python 流程控制 - 迴圈進階控制,break、continue、else 命令