目標
- 掌握for迴圈的使用方法
- 理解for迴圈的巢狀
在第3章中,我們學習了times迴圈。times迴圈可以讓一段程式碼重複執行指定的次數。
本章我們將學習另一種迴圈結構——for迴圈。它同樣能讓一段程式碼重複執行,但無需指定重複的次數。
那這段程式碼會重複執行多少次呢?還記得上一章中學習的陣列嗎,for迴圈中的陣列裡有多少個物件,程式碼就會重複執行多少次。
下面讓我們開始本章的學習。
for迴圈
首先來看for迴圈的格式:
for element in array
....待重複執行的程式碼
是不是沒有看明白?哈哈,沒關係,我來解釋一下你就清楚了。
以上for迴圈結構的意思是:對於陣列(array)裡的每一個元素(element),都執行一次“待重複執行的程式碼”。也就是說,陣列裡有多少個元素,就重複執行多少次下面的程式碼。
看了上述文字你也許還是感覺很蒙,那就讓我們通過下面這個關卡來切實體驗一下for迴圈的用法吧。
這是我為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 , 可是直接點選下方的圖片,以開啟這一測試關卡。
很明顯,面對如此多的香蕉,肯定是不能一隻只地去收集了,那樣太機械了,操作起來也不現實。所以,for迴圈這個時候就派上大用場了。
希望你能順利通關!
for的巢狀
還有一點需要注意,for迴圈是可以巢狀的。
什麼是巢狀呢?你有沒有見過俄羅斯套娃,或者是象牙球雕?
對,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迴圈也是可以被巢狀的。