重複結構 - for 用 range

程式設計中重複結構可以重複執行某個程式區塊許多次。許多問題的解決都需要重複相同的程式區塊的使用,例如:

  1. 寫程式計算全班50個同學的學期成績。計算成績的程式區塊是一樣的,但須重複 50 次。

  2. 寫程式計算 n! = 1 * 2 * 3 * 4 *...* n-1 * n, 重複 * n 次

  3. 寫程式排序比賽的成績,需重複比大小的動作。

  4. 寫程式計算所有用戶的用電金額,電費計算的公式和條件是一樣的,需重複計算在不同用戶的資料上。

  5. 合成1000個客戶的聯絡人、地址、電話成為信封封面的標籤格式,

如果是明確次數的重複可以用 for 迴圈配合 range() 函數來做。

for 迴圈用 range(n1 [, n2, n3]) 可以視為有一個計數器在控制迴圈的次數。這個計數器可稱為註標。註標可以用 1 個數,2 個數, 3 個數來表達。以下將逐一說明。

for 配合 range(a) 使用單一參數

for i in range(a):

程式碼區塊 X

上列 for 迴圈中,i 的值會從 0 開始,每次增加 1, 一直到 a 但是不包括 a。也就是到 a 的前一個值。

程式碼區塊 X, 會重複 i 從 0 數到 a-1 共 a 次。

i 的重複是自動的,我們不用自己去寫程式碼來變化 i 的值。

範例:計算0 加到 100。

範例:計算 0 + 1 + ... n

for 配合 range(a, b) 使用 2 個參數

for i in range( a, b):

程式碼區塊 Y

上列 for 迴圈中,i 的值會從 a 開始,每次增加 1, 一直到 b 但是不包括 b。也就是到 b 的前一個值。

程式碼區塊 Y, 會重複 i 從 a 數到 b-1,總共 b-a 次。

i 的重複是自動的,我們不用自己去寫程式碼來變化 i 的值。

範例:輸入a, b。觀察for i 在range(a, b)的變化。

範例:輸入a, b。計算a 加到 b,不包括 b。也就是計算 a + (a+1) + (a+2) ...+ (b-1)。

如果希望計算 從 a 一直加到 b,要包括 b,則須用

for i in range(a, b+1):

程式碼區塊

範例:輸入a, b。計算a 加到 b, 包括 b。也就是計算 a + (a+1) + (a+2) ...+ b。 包括 了 b。

如果要列出計算式,可以加上列印式。如下:

for 配合 range(a, b, c) 使用 3 個參數

for i in range( a, b, c):

程式碼區塊 Z

上列 for 迴圈中,i 的值會從 a 開始,每次增加 c, 一直到 b 但是不包括 b。也就是到 b 的前一個值。

程式碼區塊 Z, 會重複 i 從 a 數到 b-1,每次增加 c。也就是 a, 來會是 a+c, 下一個是 a+2*c ...一直到 b-1

i 的重複是自動的,我們不用自己去寫程式碼來變化 i 的值。

範例:輸入a, b,c。加總從 a 開始每次增加c, 一直到 b,不包括 b。也就是計算 a + (a+c) + (a+2*c) ...+ (b-1)。

如果希望計算 從 a , 每次增加c, 一直到 b,要包括 b,則須用

for i in range(a, b+1, c):

程式碼區塊

範例:輸入a, b,c。加總從 a 開始每次增加c, 一直到 b,要包括 b。也就是計算 a + (a+c) + (a+2*c) ...+ b。

範例:如果 range(a,b,c), a>b 則 c 要是負數,才能進入for 的迴圈中。

巢狀 的 for 迴圈

for 迴圈所要執行的程式區塊中,又有 for 的語句。如此形成了巢狀迴圈。

例如:以下基本範例,最外圈 i,內圈 j (i, j 是所用的計數變數,可自行設定名稱,這裡設定 i 和 j)

例如:以下基本範例,最外圈 i,其次 j, 最內圈 k (i, j ,l 是程式設計師所用的計數變數)

例如:列印 九九乘法表,直接只列印值。

例如:列印 九九乘法表,列印 多少*多少 = 多少。

for 迴圈中的 break 敘述

在 for 的敘述區中,如果執行 break 敘述,程式將即刻離開 for 迴圈。用於中途因特定狀況,需結束迴圈的執行時。所以通常存在條件句中。

範例:輸入一數 n,並計算1+2+3+...+n 的和,並輸出結果。但如果進行加總的和超過65000,則需即刻停止加總,並列印,[總和超過範圍了] 。

for 迴圈中的 continue 敘述

在 for 的敘述區中,如果執行 continue 敘述,則馬上進行 for 下一回合的執行。continue 之下的敘述完全不會被執行。通常 continue 會存在某一個條件下。

範例:輸入一數 n,並計算1+2+3+...+n 的和,並輸出結果。但如果要加總的數是5 的倍數,就跳過,並列印[跳過]。

這個範例的寫法,也可以用以下的程式碼達到。( 本例將 continue 去除,並加上 if 的 else 區塊即可)

for ... else

當 for 迴圈結束時,會執行 else 區中的敘述。

範例:若遇到break 則會立刻跳出 for 的迴圈,else 就不會被執行了。

i 計數應該是 1,2,3。但是 i 若是 2 的倍數的時候,透過 if 判斷而 break 出去了,else 區塊並未被執行。