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