Python while迴圈詳解

2020-07-16 10:04:42
while 迴圈的語法格式如下:

[init_statements]
while test_expression :
    body_statements
    [iteration_statements]

while 迴圈在每次執行迴圈體之前,都要先對 test_expression 迴圈條件求值,如果迴圈條件為真,則執行迴圈體部分。從上面的語法格式來看,疊代語句 iteration_statements 總是位於迴圈體的最後,因此只有當回圈體能成功執行完成時,while 迴圈才會執行迭代語句 iteration_statements。

從這個意義上看,while 迴圈也可被當成分支語句使用,即如果 test_expression 條件一開始就為假,則迴圈體部分將永遠不會獲得執行的機會。

下面程式示範了一個簡單的 while 迴圈:
# 迴圈的初始化條件
count_i = 0
# 當count_i小於10時,執行迴圈體
while count_i < 10 :
    print("count:", count_i)
    # 疊代語句
    count_i += 1
print("迴圈結束!")
在使用 while 迴圈時,一定要保證迴圈條件有變成假的時候:否則這個迴圈將成為一個死迴圈,永遠無法結束這個迴圈。例如如下程式碼:
# 下面是一個死迴圈
count_i2 = 0
while count_i2 < 10 :
    print("不停執行的死迴圈:", count_i2)
    count_i2 -=1
print("永遠無法跳出的迴圈體")
在上面程式碼中,count_i2 的值越來越小,這將導致 count_i2 的值永遠小於 10,count_i2<10 迴圈條件一直為 True,從而導致這個迴圈永遠無法結束。

與前面介紹分支語句類似的是,while 迴圈的迴圈體中所有程式碼必須使用相同的縮排,否則 Python 也會引發錯誤。例如如下程式:
# 迴圈的初始化條件
count_i = 0
# 當count小於10時,執行迴圈體
while count_i < 10:
    print('count_i的值', count_i)
count_i += 1
執行上面程式,將會看到執行一個死迴圈。這是由於 count_i += 1 程式碼沒有縮排,這行程式碼就不屬於迴圈體。這樣程式中的 count_1 將一直是 0,從而導致 count_i < 10 一直都是 True,因此該迴圈就變成了一個死迴圈。

使用while迴圈遍歷列表和元組

由於列表和元組的元素都是有索引的,因此程式可通過 while 迴圈、列表或元組的索引來遍歷列表和元組中的所有元素。例如如下程式:
a_tuple = ('fkit', 'crazyit', 'Charli')
i = 0
# 只有i小於len(a_list),繼續執行迴圈體
while i < len(a_tuple):
    print(a_tuple[i]) # 根據i來存取元組的元素
    i += 1
執行上面程式,可以看到如下輸出結果:

fkit crazyit Charli

按照上面介紹的方法,while 迴圈也可用於遍歷列表。

下面示範一個小程式,實現對一個整數列表的元素進行分類,能整除 3 的放入一個列表中;除以 3 餘 1 的放入另一個列表中;除以 3 餘 2 的放入第三個列表中:
src_list = [12, 45, 34,13, 100, 24, 56, 74, 109]
a_list = [] # 定義儲存整除3的元素
b_list = [] # 定義儲存除以3餘1的元素
c_list = [] # 定義儲存除以3餘2的元素
# 只要src_list還有元素,繼續執行迴圈體
while len(src_list) > 0:
    # 彈出src_list最後一個元素
    ele = src_list.pop()
    # 如果ele % 2不等於0
    if ele % 3 == 0 :
        a_list.append(ele) # 新增元素
    elif ele % 3 == 1:
        b_list.append(ele) # 新增元素
    else:
        c_list.append(ele) # 新增元素
print("整除3:", a_list)
print("除以3餘1:",b_list)
print("除以3餘2:",c_list)