迴圈敘述
要讓程式重複做同一件事,總不能一直複製貼上。這一章的迴圈就是拿來重複的:Python 有兩種迴圈,for 和 while。
for 與 range()
Section titled “for 與 range()”for 會走過一連串東西,每繞一圈拿出其中一個。最常見的搭配是 range(),它會產生一串數字。range(5) 是從 0 到 4(注意,是到 5 的前一個為止,不包含 5):
for i in range(5): print(i)一直按「下一步」,注意變數 i 每繞一圈就換成下一個數字,for 那一行也被一再走過。
range() 有三種寫法:
range(結束):從 0 開始,到「結束」的前一個為止。range(開始, 結束):從「開始」到「結束」的前一個。range(開始, 結束, 間隔):每次跳「間隔」這麼多。
for i in range(2, 11, 2): print(i)range(2, 11, 2) 就是從 2 開始、每次加 2、到 11 之前為止,也就是 2、4、6、8、10。
for 走過串列
Section titled “for 走過串列”除了數字,for 也能直接走過一個串列,每圈拿出裡面的一個元素:
fruits = ["蘋果", "香蕉", "橘子"]
for fruit in fruits: print(fruit)如果走串列時還想要一個「第幾個」的編號,用 enumerate():它每圈同時給你編號和元素。加上第二個參數 1,編號就從 1 開始數(不寫則從 0 開始):
fruits = ["蘋果", "香蕉", "橘子"]
for i, fruit in enumerate(fruits, 1): print(i, fruit)迴圈很常搭配一個變數來累加。先把總和設成 0,每繞一圈就加一個數上去:
total = 0
for i in range(1, 11): total = total + i
print(total)range(1, 11) 是 1 到 10,全部加起來會得到 55。這種「準備一個變數、在迴圈裡一次一次累加」的寫法,之後會一直用到。
用迴圈畫圖形
Section titled “用迴圈畫圖形”把字串乘上一個數字,會得到重複那麼多次的字串,例如 "*" * 3 是 "***"。搭配迴圈,每圈的重複次數不一樣,就能畫出圖形。這類「星號三角形」是很常見的練習:
for i in range(1, 6): print("*" * i)第 i 圈印 i 個星號,所以印出一個一行比一行長的三角形。
while:條件成立就一直做
Section titled “while:條件成立就一直做”while 不數次數,而是只要條件還成立就一直重複。下面這段從 5 倒數,每圈把 count 減 1,等 count 不再大於 0 就停:
count = 5
while count > 0: print(count) count = count - 1
print("發射!")寫 while 一定要確認條件有機會變成不成立(這裡靠 count = count - 1),不然它會一直跑下去,變成無窮迴圈。
while 搭配輸入
Section titled “while 搭配輸入”當你事先不知道要跑幾圈時,while 特別好用。下面這段會一直讀數字、加總,直到使用者輸入 0 為止。按「執行」,依序輸入幾個數字,最後輸入 0 結束:
total = 0number = int(input("輸入一個數字,輸入 0 結束:"))
while number != 0: total = total + number number = int(input("再輸入一個,輸入 0 結束:"))
print("總和是", total)你可能會在考題或別人的程式裡看到一種更精簡的寫法,用 :=(叫做「海象運算子」,Python 3.8 才加進來)把「讀輸入」和「判斷」合併在 while 那一行:
total = 0
while (n := int(input("輸入數字,輸入 0 結束:"))) != 0: total = total + n
print("總和是", total)(n := int(input(...))) 的意思是「把讀到的值存進 n,同時把這個值拿去比較」。它比上面分成兩行的寫法短,但也比較不好一眼看懂。看得懂就好,剛開始學建議還是用上面那種清楚的寫法。