--- tags: Python --- # 重複結構 ## for-loop for迴圈主要的目的是要處理「特定次數或範圍」的重複行為 寫法: ```python= for 變數 in 序列: #code here ``` 序列`list`是一種Python的複合資料型態,之後會再提到。 最一開始學習for迴圈只要先學會指定次數的型態就可以了, 所以我們需要先學習`range()`函式: * **range()** `range()`函式會回傳一個序列`list`,最主要在for迴圈使用。 寫法有三種: ```python= range(stop) range(start, stop) range(start, stop, step) ``` 其中range中的start, stop是一個左閉右開的區間, 也就是包含start但不包含stop。 第一種寫法會回傳一個 `0` 到 `(stop - 1)`,每次遞增 `1` 的序列。 第二種寫法會回傳一個 `start` 到 `(stop - 1)`,每次遞增 `1` 的序列。 第三種寫法會回傳一個 `start` 到 `(stop - 1)`,每次遞增 `step` 的序列(不一定會包含stop - 1)。 學習完`range()`函式後,我們可以來看for迴圈了。 for迴圈會針對序列中的每一個元素進行指定的動作, 例如我們想要印出1 ~ 10,可以寫成: ```python= for i in range(1, 11): print(i, end=' ') print() ``` 也可以寫成: ```python= for i in range(10): print(i + 1, end=' ') print() ``` 第一種寫法是直接讓`range()`產生一個1~10的序列(因為是左閉右開,所以沒有11),再直接印出序列裡面的元素。 而第二種寫法是讓`range()`產生0~9的序列,並在印出之前先`+1`,再印出運算完後的元素。 ### 巢狀 for-loop 有時候我們想要跑的情況是用單層的for迴圈比較難達成的(例如九九乘法表),這時候就會需要使用到巢狀的for迴圈。 寫法: ```python= for i in list1: #code here -- Block 1 for j in list2: #code here -- Block 2 #code here -- Block 3 ``` 此時for迴圈的跑法是用 i 遍歷list1的元素, 並且對於每一個i,i 都會先執行完Block 1中的程式碼, 再等待 j 遍歷list2並執行完Block 2中的程式碼。 i 再執行Block 3中的程式碼, 最後再進入下一次的 i。 例如: ```python= for i in range(4): for j in range(5): print(i * 5 + j, end=' ') print() ``` 結果: ``` 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ``` > 練習: 九九乘法表 > 印出一個九九乘法表, > 其中每一格都要顯示axb=c的格式。 > 例如: 9x9=81 --- ## while-loop while迴圈主要的目的是要處理「具有特定條件」的重複行為 寫法: ```python= while 條件式: #code here ``` 只要在條件式回傳值為真 `True` 的情形,就會重複執行迴圈內容的程式碼。 例如: ```python= num = int(input()) while num != 0: #code here num = int(input()) ``` 這段程式碼會等待使用者輸入,執行區塊內的程式後,再次等待使用者輸入,直到輸入值為0為止。 --- ## 改變迴圈執行 * **continue** `continue` 敘述可以跳過「當次」的迴圈,進入下一次的執行 例如: ```python= for i in range(5): if i == 2: continue print(i, end=' ') print() ``` 結果: `0 1 3 4` * **break** `break` 敘述則會破壞掉整個迴圈結構 例如: ```python= for i in range(5): if i == 2: break print(i, end=' ') ``` 結果: `0 1` --- ## 註: Python的縮排非常重要,因為Python的區塊是以對齊分區的,所以不能任意的調整移動。