上一篇文章最後的練習第一題是「計算從 1 加到 5 的總和是多少?」,按照我們已經學會的語法,寫出來的答案如下:
>>> n = 0
>>> n += 1
>>> n += 2
>>> n += 3
>>> n += 4
>>> n += 5
>>> n
15
寫個五六行可能還行,但是第二題的「計算從 2 乘到 9 的乘積是多少?」:
>>> n = 2
>>> n *= 3
>>> n *= 4
>>> n *= 5
>>> n *= 6
>>> n *= 7
>>> n *= 8
>>> n *= 9
>>> n
362880
天啊,寫完都快要睡著了!要是今天改從 2 乘到 100 那豈不是太可怕了 😱
不用擔心,機器的優點在於擅長處理重複的事情,這種重複又單調的加法乘法,可以用**迴圈 (Loop)**的概念來處理,例如:
>>> n = 0
>>> for i in range(1, 6):
>>> n += i
>>> n
15
這段程式碼冒出了幾個新東西,讓我們來細細探究。
先來看看 range(1, 6)
是什麼,這東西會從 1 開始列舉所有數字,一路列舉到小於 6 的數字為止,也就是 1, 2, 3, 4, 5
這樣。
因為 6 並不小於 6,所以 6 不在列舉的數字清單裡面。
這個 for ... in ...
的語法被稱為 For 迴圈 (For Loop),可以用來拜訪 range(1, 6)
列舉出來的所有數字。
因此當程式執行到第二行時,會從 range(1, 6)
裡面取第一個數字出來放在變數 i
裡面,也就是 i = 1
,然後執行第三行 n += i
,也就是 n += 1
。
執行完 n += i
後,會回到第二行,再取一個數字出來,也就是 i = 2
,然後再執行一次 n += i
,一直反覆這樣的循環,直到 1, 2, 3, 4, 5
每個數字都被取出來用過一次為止。
所有數字都被取出來之後,就會離開這個迴圈,並執行最後一行顯示計算出來的總和結果。
這樣的語法是不是很方便呢?只要把 range(1, 6)
改成 range(1, 101)
就可以計算從 1 累加到 100 的結果囉!
在 For 迴圈裡面,第二行程式碼前面似乎多了四個空格,這些空格被稱為縮排 (Indent),縮排對 Python 的程式碼架構至關重要,哪些程式碼要在 For 迴圈裡面執行,哪些不用,都是根據縮排來決定的。縮排的空格數量不一定要是四個,但每一行的空格數量都要一樣:
>>> for i in range(10):
>>> i += 1 # 也可以只空兩格
>>> i += 2 # 錯誤寫法,前一行空兩格,下一行也要跟著空兩格
現在使用 For 迴圈的語法,練習以下題目:
完整的程式碼放在此 Colab 裡面供各位參考。