<style> .small { font-size: 32px; } .verysmall { font-size: 28px; } .example { text-align: left; border: solid; } </style> # For 迴圈 ---- {%gist HowardHsuuu/de4fd7ec29e460d40bc8577034bb7070 %} --- ## Why For Loop? ### 不是已經有while了嗎? ---- #### while是有明確結束條件的迴圈 #### 那麼想一想: 如果我想執行程式10000次看看結果呢? 如果我想要針對某個集合的每個元素進行操作呢? ---- ## While vs For * While * 有明確終止條件 * 不確定執行次數 * For * 確定執行次數 * 可用於遍歷可迭代物件 --- # For 迴圈 ## 語法初見 ---- ## 先來小試身手! ```python=1 for i in range(5): print(i, end=' ') #output: 0 1 2 3 4 ``` ```python=1 for i in [0, 1, 2, 3, 4]: print(i, end=' ') #output: 0 1 2 3 4 ``` 可以想像變數 i 像游標 依次選擇下一個整數 --- # How?... <br> ### 來點名詞解釋吧! ---- ## 迭代&可迭代物件 <br> #### 根據Google: 電腦科學中,迭代是程式中對一組指令的重複,也可用來描述一種特定形式的具有可變狀態的重複。 <br> #### 那可迭代物件呢? 就是可以被迭代的物件(? ---- ## 還是不懂? #### 沒事,剛剛我也沒聽懂 ---- ### 可迭代物件(iterable)簡單來說... * 能被分成一個一個元素的物件 * 能一個一個回傳本身元素的物件 &rarr; 也就是可以一個一個輪流取出其中元素的物件 <br> iterable 的例子:list, string, dictionary... <br> ---- 流程圖(flow chart) <!-- .slide: data-background="#ffffff" --> ```flow st=>start: Loop start e=>end: For end op=>operation: variable = first element op1=>operation: do something op2=>operation: variable = next element cond=>condition: next? st->op->op1->cond(yes)->op2->op1 cond(no)->e ``` 在for迴圈中,不停依序將variable更新為下個元素並進行處理的動作就是迭代。 --- # For 迴圈 ## 完整語法 ---- # For 迴圈 ```python = 1 for [variable] in [iterable]: [縮排] do something [縮排] do something [縮排] do something ``` ex: ```python = 1 for i in [1, 2 ,3]: print(i, end = ' ') # 1 2 3 ``` ```python = 1 string = "sprout" for i in string: print(i, end = ' ') # s p r o u t ``` ---- # range( ) range( )可以建立一個包含整數的iterable * <span class="small"> `range(start, stop, step)`</span> * <span class="small">由start至stop(不含),每次遞增step</span> * <span class="small">start預設是0,step預設是1</span> ```python=1 for i in range(5, 15, 5): print(i, end = ' ') # 5 10 注意區間是[start, stop),stop是不包含在內的 for i in range(5, 15): print(i, end = ' ') # 5 6 7 8 9 10 11 12 13 14 for i in range(5): print(i, end = ' ') # 0 1 2 3 4 ``` ---- ## 小練習_1 輸出1到100(不含)中符合「除以7餘5」條件的整數 Output: 5 12 19 26 33 40 47 54 61 68 75 82 89 96 ---- ### solution1 ```python=1 for i in range(1,100): if (i%7)==5: print(i,end=" ") ``` ### solution2 ```python=1 for i in range(5,100,7): print(i,end=" ") ``` ---- ## 小練習_2 [neoj 3088](https://neoj.sprout.tw/problem/3088/) [neoj 3032](https://neoj.sprout.tw/problem/3032/) 3032請注意Hint(還看不懂沒關係) 把record當成一個iterable使用即可 ex:輸入 -1 2 -3 record = [-1, 2, -3] --- # 巢狀迴圈 ## Nested For ---- ## Nested For ```python=1 for [variable1] in [iterable]: [縮排]for [variable2] in [iterable]: [縮排][縮排] do something [縮排][縮排] do something [縮排][縮排] do something ``` 如果外層執行n次,內層m次,則總共會執行m*n次 ```python=1 for i in range(3): for j in range(2): print(i,j) ''' 0 0 0 1 1 0 1 1 2 0 2 1 ''' ``` ---- # break & continue ### 和在while時的作用一樣 * break: 中斷迴圈,跳出至迴圈外 * continue: 跳過此次迴圈剩下的指令,variable更新並開始下次迴圈執行 ---- ## 小練習_3 輸入x跟y 輸出一個長x寬y,以“*”組成的長方形 ex: input (3,4) output: ``` **** **** **** ``` ---- ## solution ```python=1 x = input() y = input() for i in range(int(x)): for j in range(int(y)): print("*",end="") print() ``` ---- ## 小練習_4 [neoj 3089](https://neoj.sprout.tw/problem/3089/) [neoj 3020](https://neoj.sprout.tw/problem/3020/) 這次請用for迴圈寫喔~ ---- ## 酷東西 ```python=1 for i in range(3): if i == 2: print("hi") break else: print("hello") ``` 猜猜看會輸出什麼? 試試看把 break 拿掉呢? 把 if 的條件改成不會成立的呢? --- ## 回家作業 [neoj 3031](https://neoj.sprout.tw/problem/3031/) [neoj 3034](https://neoj.sprout.tw/problem/3034/) ###### tags: `sprout`
{"metaMigratedAt":"2023-06-17T22:18:43.366Z","metaMigratedFrom":"YAML","title":"For 迴圈","breaks":true,"contributors":"[{\"id\":\"7e503499-7e66-45cf-bd30-4493f761a30b\",\"add\":4946,\"del\":1232}]"}
    524 views