BOO入門/流程控制/迴圈
BOO入門 > 流程控制/迴圈 (上一章:流程控制-條件 下一章:容器與轉型)
For迴圈
[編輯]Boo 的 for 迴圈並不像其他語言,如 C、C#,的 for 迴圈,它比較接近 foreach。 通常 for 迴圈會與 range 函式一起使用,range 函式會建立 enumerator 以傳回數值。 下面的例子使用了 join 函式,join 函式會根據 range 函式傳回的 enumerator 來建立字串。
// join 與 range 的範例
join(range(5))
join(range(3, 7))
join(range(0, 10, 2))
輸出結果
0 1 2 3 4 3 4 5 6 0 2 4 6 8
range 可以接受三種參數傳遞方式:
- range(end):只傳遞結束
- range(start, end):傳遞起始與結束
- range(start, end, step):傳遞起始、結束與遞增的間隔
與 for 迴圈搭配的方法很簡單。
for i in range(5):
print i
輸出結果
0 1 2 3 4
事實上這與 C# 一樣快。 因為 range 函式並不建立陣列以持有所有數值,而是建立 IEnumerator,這會比較快速地產生你所需要的數字而又不至於浪費空間、時間。
譯註:上面的例子揭露一件有趣的事情,不知道你注意到沒有?當你使用 range(5) 時,實際上是取得 0,1,2,3,4,而不是 1,2,3,4,5﹔使用 range(3,7)時,實際上取得 3,4,5,6 (沒有7)﹔這與 python 一致,也是初接觸 Boo/Python 的人需要特別注意的。
While迴圈
[編輯]while 迴圈與 if 述句非常類似,不一樣的地方在於 while 迴圈會在條件為真的情況下重複執行迴圈內的程式區塊。
// while迴圈
i = 0
while i < 5:
print i
i += 1
輸出結果
0 1 2 3 4
是的,不用猜了, i+=1 等於 i=i+1。
Continue關鍵字
[編輯]continue 關鍵字主要用在迴圈。它會使得程式從迴圈的開始繼續執行,當然,要不要接著執行迴圈裡面的程式碼還是要看條件式而定。
// continue
for i in range(10):
continue if i % 2 == 0
print i
輸出結果
1 3 5 7 9
在這個迴圈裡面,當 i 是偶數時,就不印出,所以只有奇數會被印出。 i % 2 則是取得 i / 2 的餘數,i % 2 == 0 則表示檢查 i % 2 的餘數是否為 0。
While-Break-Unless 迴圈
[編輯]while-break-unless 迴圈與其他語言的 do-while 述句非常類似。
// while-break-unless 迴圈
i = 10
while true:
print i
i -= 1
break unless i < 10 and i > 5
輸出結果
10 9 8 7 6 5
其實就是簡單的 while 迴圈。但使用 break unless,可以讓迴圈裡的程式(也就是break unless前的程式)至少先執行一次,然後再決定是否要離開。
Pass關鍵字
[編輯]如果你不想在程式區塊裡作任何事情的話,就使用 pass 關鍵字吧~
// pass
while true:
pass //Wait for keyboard interrupt (ctrl-C) to close program.
練習
[編輯]- 印出從 10 到 1 的所有數字。
- 印出 1 到 100 每個數字的平方。