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 每个数字的平方。