1. 程式人生 > >第6章 for迴圈

第6章 for迴圈

## 目標 ## * 掌握for迴圈的使用方法 * 理解for迴圈的巢狀 在第3章中,我們學習了times迴圈。times迴圈可以讓一段程式碼重複執行指定的次數。 本章我們將學習另一種迴圈結構——for迴圈。它同樣能讓一段程式碼重複執行,但無需指定重複的次數。 那這段程式碼會重複執行多少次呢?還記得上一章中學習的陣列嗎,for迴圈中的數組裡有多少個物件,程式碼就會重複執行多少次。 下面讓我們開始本章的學習。 ## for迴圈 ## 首先來看**for迴圈**的格式: > **for** element **in** array
> ....待重複執行的程式碼 是不是沒有看明白?哈哈,沒關係,我來解釋一下你就清楚了。 以上for迴圈結構的意思是:對於**陣列(array)**裡的每一個**元素(element)**,都執行一次“待重複執行的程式碼”。也就是說,數組裡有多少個元素,就重複執行多少次下面的程式碼。 看了上述文字你也許還是感覺很蒙,那就讓我們通過下面這個關卡來切實體驗一下for迴圈的用法吧。 ![challenges_for](https://img2020.cnblogs.com/blog/508474/202102/508474-20210228115041234-320483311.gif "題面") 這是我為times迴圈那一章節所設計的一個關卡,它同樣可以使用for迴圈來解決。 此關卡中有4只香蕉,它們共同組成了一個bananas陣列。這4只香蕉都是這個數組裡的元素,分別使用bananas[0],bananas[1],bananas[2]和bananas[3]來指代它們。 如果使用for迴圈,那麼這一關的解法如下: >
for b in bananas
> ....turnTo b
> ....step distanceTo b
注意,以上程式碼中的.僅用來表示空格,測試執行時請不要輸入。 根據上述所介紹的for迴圈結構用法,因為bananas數組裡有4個元素,所以迴圈會被執行4次。每一次迴圈時,都會依次從陣列中取一個元素,將它賦值給b。 為了更深入的理解,我們在這裡將上述for迴圈展開,可以得到如下的程式碼: > b = bananas[0]
> turnTo b
> step distanceTo b
>
> b = bananas[1]
> turnTo b
> step distanceTo b
>
> b = bananas[2]
> turnTo b
> step distanceTo b
>
> b = bananas[3]
> turnTo b
> step distanceTo b
怎麼樣,看了以上展開的程式碼之後,for迴圈是不是更容易理解了? 為了測試你是不是真的理解了for迴圈的用法,我們來做如下一個測試。 請在瀏覽器裡輸入 http://t.im/hnwf , 可是直接點選下方的圖片,以開啟這一測試關卡。 [![test_for](https://img2020.cnblogs.com/blog/508474/202102/508474-20210228115125638-276397998.png "點選以開啟此測試關卡")](https://app.codemonkey.com/user_challenges/55805) 很明顯,面對如此多的香蕉,肯定是不能一隻只地去收集了,那樣太機械了,操作起來也不現實。所以,for迴圈這個時候就派上大用場了。 希望你能順利通關! ## for的巢狀 ## 還有一點需要注意,for迴圈是可以巢狀的。 什麼是巢狀呢?你有沒有見過俄羅斯套娃,或者是象牙球雕? ![for迴圈的巢狀](https://img2020.cnblogs.com/blog/508474/202102/508474-20210228115210459-1254901829.gif "俄羅斯套娃") 對,for迴圈的巢狀就是指,在一個for迴圈的裡面,仍然是for迴圈。下面請看一下for迴圈的兩層巢狀: >
for a in arrayA
> ....for b in arrayB
> ........待重複執行的程式碼段一
> ....待重複執行的程式碼段二
以上即是一個兩層的for迴圈,可以看到,在最外層的for迴圈裡面,包含了另一個for迴圈。 若將以上程式碼展開,可以得到以下程式碼: > **a = arrayA[0]**
> b = arrayB[0]
> 程式碼段一
> b = arrayB[1]
> 程式碼段一
> b = arrayB[2]
> 程式碼段一
> .... # 直到內層的for迴圈結束
> **程式碼段二**
> **a = arrayA[1]**
> b = arrayB[0]
> 程式碼段一
> b = arrayB[1]
> 程式碼段一
> b = arrayB[2]
> 程式碼段一
> .... # 直到內層的for迴圈結束
> **程式碼段二**
> .... # 直到外層的for迴圈結束
測試一下你是不是真正地理解了for的巢狀,請問,假設arrayA陣列中有3個元素,arrayB陣列中有5個元素,那麼,在這個兩層巢狀中,程式碼段一一共被執行了多少次?程式碼段二呢? 公佈答案啦,程式碼段一一共被執行了3x5=15次,程式碼段二一共被執行了3次。 怎麼樣,你答對了嗎?如果你的答案不正確,請再仔細思考一會兒。 75關即需要使用到for的巢狀結構,你也可以使用它來自測。 好了,for迴圈的內容就這麼多了,課後作業趕緊做起來吧! ## 作業 ## * 故事模式61 - 75關 * 進階模式6-1 - 6-15關
注意,一定保證要所有關卡都拿到三顆星。
## 小結 ## * for迴圈跟times迴圈一樣,也可以用來重複執行某一段程式碼。 * for迴圈無需手動指定迴圈次數,具體迴圈次數由其中的陣列元素個數決定。 * for迴圈是可以被巢狀的,即for迴圈的內部,仍然可以是for迴圈。其實,times迴圈也是可以被嵌