3.2. while-loop 結構
「while-loop 」結構(或稱 while 迴圈)也可以用重複執行某些特定的程式碼,在while 關鍵字後方是條件判斷,當「條件成立」時,while 迴圈會執行,否則則結束。
while 條件成立:
執行此處的程式碼
- 參考檔案:while-loop.py
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 關鍵字來判斷所需要達成的特定條件是否成立,當條件成立時跳出迴圈。
- 參考檔案:while-loop-break.py
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
# 執行結果
???
牛刀小試
- a565: 2.p&q的邂逅 [參考答案] ★★★
- 使用 while 迴圈、字串。
- 程式設計步驟:
步驟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
- d649: 數字三角形 [參考答案] ★★
- 使用 while 迴圈 + If。
- 程式設計步驟:
# 步驟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:
- while 迴圈:
- a038: 數字翻轉 [參考答案] ★
- while 迴圈 + If:
- while 迴圈 + If-Else
參考資料
- Python自動化的樂趣, 第二章, Al Sweigart 著、H&C 譯, 碁峰
- Python編程入門第3版(簡), 第四章, Toby Donaldson著, 人民郵電出版社
- 精通Python, 第四章, Bill Lubanovic著, 賴屹民譯, 歐萊禮