跳到內容

進階控制流程

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

break 會立刻結束整個迴圈,後面的圈都不跑了。很適合「找到就走」的情況。下面這段從 1 開始往上數,找第一個平方大於 50 的數,一找到就印出來並跳出:

for n in range(1, 100):
if n * n > 50:
print("第一個平方大於 50 的數:", n)
break

找到 8 之後就 break,range(1, 100) 剩下的 9 到 99 根本不會跑到。

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 裡了。這種組合很常見,例如一邊走過一串數字、一邊判斷、一邊數數。下面數 1 到 20 裡有幾個 3 的倍數:

count = 0
for n in range(1, 21):
if n % 3 == 0:
count = count + 1
print("1 到 20 裡 3 的倍數有", 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 開始。

v0.9.1 (c924b5b)