9 while 迴圈

9.1 while 迴圈結構

一個 while 迴圈結構如下:

while 某些條件:
    # 每次迭代執行的程式

在每一次的迭代之前,Python 都會檢查某些條件是否成立,假如判斷結果為布林 True 就會執行每次迭代執行的程式;一但條件不成立,意即判斷結果為布林 False 迴圈就會終止。

我們試著寫輸出美國影集六人行(Friends)六個主要演員的 while 迴圈:

starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
i = 0
while i < 6:
    print starrings[i]
    i += 1
## Jennifer Aniston
## Courteney Cox
## Lisa Kudrow
## Matt LeBlanc
## Matthew Perry
## David Schwimmer

很重要的是 i += 1,假如忘記寫這一行程式,我們的 while 迴圈會無限次數地一直輸出 “Jennifer Aniston”,原因是我們的判斷條件永遠成立(0 小於 6),所以會不斷地執行 print starrings[0]

9.1.1 兩種迴圈的運用時機

我們何時應該運用 for 迴圈、何時應該運用 while 迴圈呢?一個簡單的判斷是:假如我們明確知道程式的迭代次數,可以視個人偏好採用 for 迴圈或 while 迴圈;在不知道迭代次數的情形下,我們只能採用 while 迴圈。

這個說法還是略嫌抽象,舉一個例子說明會比較好理解。假如我們現在投擲一枚公正的銅板,想知道總共需要投擲幾次才會出現三個正面,這就是一個不知道迭代次數的問題。運氣好一點也許投擲三次,三次都是正面;運氣差一點的也許要投擲十幾次才湊得齊三次正面。讓我們寫一段簡單的程式來模擬這個例子:

from random import choice

coin_flips = [] # 建立一個空的清單放置每一次投擲的結果
coin = ["Head", "Tail"]

while coin_flips.count("Head") < 3:
    coin_flips.append(choice(coin))

print coin_flips # 印出每次投擲的紀錄
print len(coin_flips) # 總共投擲了幾次

您可以試著自行執行幾次,看看每一輪投擲次數的差異。