進階控制流程
迴圈跑起來之後,有時候你會想中途就停下來,或是跳過某一圈。這一章介紹兩個控制迴圈的關鍵字 break 和 continue,再把迴圈和判斷疊在一起用。
break:中途跳出迴圈
Section titled “break:中途跳出迴圈”break 會立刻結束整個迴圈,後面的圈都不跑了。很適合「找到就走」的情況。下面這段在串列裡找第一個大於 5 的數,一找到就印出來並跳出:
numbers = [3, 7, 2, 9, 4]
for n in numbers: if n > 5: print("找到第一個大於 5 的數:", n) break找到 7 之後就 break,後面的 9、4 根本不會被檢查。
continue:跳過這一圈
Section titled “continue:跳過這一圈”continue 只跳過這一圈剩下的部分,直接進入下一圈,迴圈本身還會繼續。下面這段印出 1 到 10 裡的奇數:碰到偶數就 continue,跳過那行 print:
for i in range(1, 11): if i % 2 == 0: continue
print(i)while True 搭配 break
Section titled “while True 搭配 break”有一種常見的寫法:while True 本身是永遠成立的無窮迴圈,靠迴圈裡的 break 在條件滿足時跳出。下面這段會一直問密碼,答對才結束。按「執行」,第一次故意輸入錯的,第二次輸入 python:
while True: answer = input("密碼是什麼?")
if answer == "python": print("答對了!") break
print("密碼錯誤,再試一次")巢狀:把迴圈和判斷疊起來
Section titled “巢狀:把迴圈和判斷疊起來”前面其實已經看過把 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 開始。