3.2. while-loop 結構


「while-loop 」結構(或稱 while 迴圈)也可以用重複執行某些特定的程式碼,在while 關鍵字後方是條件判斷,當「條件成立」時,while 迴圈會執行,否則則結束。

while 條件成立:
    執行此處的程式碼
i = 0

while (i < 10):
    print(i)
    i = i + 1

# 執行結果
0
1
2
3
4
5
6
7
8
9

無限迴圈

不像 for 迴圈通常跟 range() 一起使用,使用 while 迴圈時,需要自行建立一個索引值變數,並且透過累積索引值來得知目前迴圈的執行次數。同時,while 迴圈也需要注意在條件斷判上,是否有「邏輯」上比較難被發現的地方,進而產生無限回圈。

while True:
    print("infinite loop!")

# 執行結束
infinite loop!
infinite loop!
infinite loop!
infinite loop!
infinite loop!
...

使用 break 跳出迴圈

在使用 while 迴圈時,通常會使用 if 結構及 break 關鍵字來判斷所需要達成的特定條件是否成立,當條件成立時跳出迴圈。

i = 0

while (i < 10):
    if i == 5:
        print('-' + str(i))
        print('-Use break!!')
        break

    print(i)
    i = i + 1

# 執行結果
0
1
2
3
4
-5
-Use break!!

使用 continue 跳過某次執行

在使用 while 迴圈時,有時候也會使用 if 結構及 continue 關鍵字來跳過某次迴圈的執行。

i = 0

while (i < 10):
    if i == 5:
        print()
        i = i + 1
        continue

    print(i)
    i = i + 1

# 執行結果
0
1
2
3
4

6
7
8
9

躍躍欲試

請了解下列程式碼與上述 while-loop-continue.py 的不同之處。

i = 0

while (i < 10):
    if i == 5:
        print()
        continue

    print(i)
    i = i + 1

# 執行結果
???

牛刀小試

步驟1: 處理資料輸入。
import sys

s = sys.stdin.readline()
s = s.strip(" \t\r\n")

# 步驟2: 資料類型轉換。
n = int(s)

# 步驟3: 使用 for 迴圈。
for i in range(0, n):
    # 步驟4: 處理輸入資料。
    s = sys.stdin.readline().replace(".", "")
    s = s.strip(" \t\r\n")

    # 步驟5: 取得字串長度。
    len_s = len(s)
    len_pre = len_s

    # 步驟6: 使用 while 迴圈。
    while True:
        # 步驟7: 使用字串方法 replace() 處理字串及取得字串長度。
        len_pre = len(s)
        s = s.replace("pq", "")
        len_now = len(s)

        # 步驟8: 使用 if 結構及 break 關鍵字,來判斷是否跳出 while 迴圈。
        if len_pre == len_now:
            break

    # 步驟9: 輸出結果。   
    c = int((len_s - len_pre) / 2)
    sys.stdout.write("{0}\n".format(c))

牛刀小試2

# 步驟1: 使用 while 迴圈。
while True:
    # 步驟2: 處理輸入資料。
    s = input("") 
    s = s.strip(" \t\r\n")

    # 步驟3: 資料類型轉換。
    n = int(s)

    # 步驟4: 使用 if 及 break 關鍵字判斷是否跳出迴圈。
    if n == 0:
        break

    # 步驟5: 使用 for 迴圈畫出圖形。
    for i in range(0, n):
        o = ['+'] * n

        for j in range(0, n-(i+1)):
            o[j] = "_"

        print("".join(o))

躍躍欲試2:

參考資料

  • Python自動化的樂趣, 第二章, Al Sweigart 著、H&C 譯, 碁峰
  • Python編程入門第3版(簡), 第四章, Toby Donaldson著, 人民郵電出版社
  • 精通Python, 第四章, Bill Lubanovic著, 賴屹民譯, 歐萊禮

results matching ""

    No results matching ""