跳到內容

進階控制流程

迴圈跑起來之後,有時候你會想中途就停下來,或是跳過某一圈。這一章介紹兩個控制迴圈的關鍵字 breakcontinue,再把迴圈和判斷疊在一起用。

break 會立刻結束整個迴圈,後面的圈都不跑了。很適合「找到就走」的情況。下面這段在串列裡找第一個大於 5 的數,一找到就印出來並跳出:

numbers = [3, 7, 2, 9, 4]
for n in numbers:
if n > 5:
print("找到第一個大於 5 的數:", n)
break

找到 7 之後就 break,後面的 9、4 根本不會被檢查。

continue 只跳過這一圈剩下的部分,直接進入下一圈,迴圈本身還會繼續。下面這段印出 1 到 10 裡的奇數:碰到偶數就 continue,跳過那行 print

for i in range(1, 11):
if i % 2 == 0:
continue
print(i)

有一種常見的寫法:while True 本身是永遠成立的無窮迴圈,靠迴圈裡的 break 在條件滿足時跳出。下面這段會一直問密碼,答對才結束。按「執行」,第一次故意輸入錯的,第二次輸入 python

while True:
answer = input("密碼是什麼?")
if answer == "python":
print("答對了!")
break
print("密碼錯誤,再試一次")

前面其實已經看過把 if 放進 for 裡了。這種組合很常見,例如一邊走過串列、一邊判斷、一邊數數:

numbers = [4, 7, 10, 3, 8]
count = 0
for n in numbers:
if n % 2 == 0:
count = count + 1
print("偶數有", count, "")

迴圈裡也可以再放迴圈。外圈每跑一圈,內圈就從頭到尾跑完一輪。下面兩層迴圈會印出一張小小的乘法表:

for i in range(1, 4):
for j in range(1, 4):
print(i, "x", j, "=", i * j)

看「下一步」時注意執行的順序:外圈的 i 停在 1 不動,內圈的 j 先從 1 跑到 3;等內圈跑完,外圈的 i 才換成 2,內圈又從 1 開始。