while迴圈
while顧名思義為「當」,也就是當某個條件成立時,便會執行一段程式碼;此判斷與執行的步驟會重複進行,直到該條件不符合時,才會終止迴圈。 語法則與if相似,也就是在while後面緊接一個判斷式和冒號,並以縮排來表示哪些程式碼是滿足while條件式後需要重複執行的。 讓我們直接看一個例子:
i = 0
while i < 10:
print(i)
i += 1
print('finish!')
我們可以觀察到 while
後面接了 i < 10
這個條件式,然後緊接著一個 :
;其中第三行與第四行皆有 縮排
,因此這兩行都是要重複執行的程式碼。
接下來我們一行一行解說程式碼在做什麼事:
- 第一行是初始化i為零
- 第二行開始判斷while迴圈的條件式,因爲0小於10,因此可以進入迴圈。
- 接著便執行一次有縮排的程式碼(第三行和第四行),印出
0
之後,i變成1。 - 當有縮排的程式碼都執行完時,便會回到第二行,再一次進行判斷。因為1還是小於10,因此可以進入迴圈,再一次執行第三行和第四行,印出
1
之後,i變成2。再一次回到第二行,因為2小於10... - 如此重複進行,直到第10次迴圈結束時,i會變成10。此時當我們要再一次進行判斷時,因為10不小於10,條件不成立,便會終止迴圈。
- 終止迴圈後,就會從有縮排的程式碼的下一行開始繼續執行。因此印出了
finish!
。 程式執行結果如下:
0
1
2
3
4
5
6
7
8
9
finish!
break
雖然我們因為想要重複執行一段程式碼而使用while迴圈,但有時候我們可能又會想要在某個時候突然跳出迴圈,該怎麼辦呢?這時候就要依靠 break
了!
break
字面上的意思是「打斷」,在這裡就是「打斷迴圈」、「跳出迴圈」的意思,只要在while迴圈中,出現 break
(自己獨立一行),就可以如我們所願跳出迴圈了,非常的直觀且容易。
那麼我們要如何在某個時候突然打斷迴圈呢?通常就會搭配前面學過的 if
,在某個條件成立時,跳出迴圈。
讓我們來看一個例子:
i = 1
total = 0
while True:
if i > 100:
break
total += i
i += 1
print(total)
- 前兩行是初始化i和total
- 第三行開始判斷while迴圈的條件式,
True
代表恆真,因此每一次都會進入迴圈,這個用法非常好用。 - 執行有縮排的程式碼(第四行到第七行),因為0沒有大於100,因此不會執行
break
,接著將total加1,i變成2。 - 因為
while True
代表恆真,因此每一次都會進入迴圈,直到第101次進入迴圈時,因為101大於100,所以會執行if以下有縮排的程式碼,也就是break
,因而跳出迴圈。 - 終止迴圈後,就會從有縮排的程式碼的下一行開始繼續執行,因此印出total的值。
值得注意的是,如果在
while
裡面又出現if
,那個if
底下的區塊就必須有兩次縮排。第一個縮排是while
造成的,第二個縮排則是if
造成的。
continue
除了強制跳出迴圈,還有另一種可能的情形是,在某個時候我們不是想要終止迴圈,只是想要跳過現在的回合,並且讓迴圈繼續跑下去,這時候我們就需要 continue
來幫助我們了。
continue字面上的意思是「繼續」,在這裡除了「繼續執行迴圈」的意思,同時也代表跳過這個回合還沒執行完的程式碼,直接繼續進行下一次的判斷,一樣來看一個簡單的例子:
i = 1
while i <= 50:
if i % 2 == 0:
i += 1
continue
elif i % 3 == 0:
i += 1
continue
print(i)
i += 1
- 第一行初始化i為零
- 因為0比50小,所以會進入迴圈。
- 因為i除以2不餘0,i除以3也不餘0,因此會繼續執行迴圈中剩下的程式碼,印出
1
,然後i變成2。 - 下一次進入迴圈時,因為2除以2餘0,因此會進入if的區塊,i變成3,然後執行
continue
!意思就是程式並不會繼續執行後面的程式碼,而是會直接回到第二行繼續進行下一次的條件式判斷。 - 因為continue只是跳過一個回合,因此並不會中斷迴圈,直到第51次while條件式判斷51沒有小於等於50時,才會終止迴圈。 可以看出這段程式做的事情即是印出1~50內不是2也不是3的倍數的數字。