BOO入門/流程控制/迴圈

BOO入門 > 流程控制/迴圈 (上一章:流程控制-條件 下一章:容器與轉型)


For迴圈

编辑
  定義 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迴圈:在條件式為真時,允許指令依照順序重複執行的一種程式結構。

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 關鍵字主要用在迴圈。它會使得程式從迴圈的開始繼續執行,當然,要不要接著執行迴圈裡面的程式碼還是要看條件式而定。

// 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.

練習

编辑
  1. 印出從 10 到 1 的所有數字。
  2. 印出 1 到 100 每個數字的平方。