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