在脚本编写中,我们经常要重复性的做一些计算或者执行某些命令,如果重复的少,那我们可以写多行脚本来实现,但是如果重复个百八十次,那每一次就写一句脚本,那是不现实的。
在Praat中,提供给我们三个循环命令:for、while、repeat。
for 循环
基本语法如下:
for 变量 to 表达式 循环体 endfor
或:
for 变量 from 表达式1 to 表达式2 循环体 endfor
循环体:也就是循环中要重复执行的语句,可以是一句或多句脚本语句。
下面我们来看看第一种语法的例子:
clearinfo for a to 5 appendInfoLine:a endfor
输出结果:
1 2 3 4 5
clearinfo:Praat内置的命令,用于清除输出窗口的内容,就与writeInfoLine的清除内容相似,但clearinfo只是用于清除输出窗口,不会进行输出任何内容。
此例子中循环输出1到5,此语法中,变量“a”默认的是从1开始,也就是第二句的意思是:从1到5。如果a小于等于5,就会执行循环体里的“appendInfoLine:a”执行之后,变量a会默认在原有基础上进行加1,所以我们看到输出结果中,下一行输出的a的值都比上一行多1。
再来看看第二种语法的例子:
clearinfo for a from -2 to 2 appendInfoLine:a endfor
输出结果:
-2 -1 0 1 2
这种语法也是每执行完一次循环,a变量都会自动加1,不同的是,循环开始的值是from后的数,from…to…也就是从多少到多少的意思。
while 循环
基本语法:
while 表达式 循环体 endwhile
当表达式的值为0或者false时,就跳出循环。可能有些人还不理解这个什么是false,简单点说其实也就是条件不成立的意思。
例子:
clearinfo a=5 while a appendInfoLine:a a-=1 endwhile
此例子的输出结果为:
5 4 3 2 1
此例子中可能有几个地方读者可能看不懂:
一个是第三行的“while a”,这的意思是:当a不等于0。上面的语法说明中明确指出:值为0。所以这是一个明确的值,如果不等于0,循环体照样会执行,即使是负数,也一样会执行。
另一个是第五行的“-=”,前面判断语句说过“>=”,“<=”,可是没见过这个“-=”,其实跟它相反的还有一个“+=”。其实这一行的“a-=1”是“a=a-1”的简写,也就是每执行一次,a的值就减1。同理,如果是“a+=1”,那就等同于“a=a+1”。如果是“a-=2”,那就等于是“a=a-2”。
repeat 循环
基本语法:
repeat 循环体 until 表达式
意思是重复循环体,当条件成立,会一直循环下去。
例子:
clearinfo a=5 repeat appendInfoLine:a a-=1 until a=0
输出结果为:
5 4 3 2 1
例子的意思是说:输出a的值,直到a=0,才会停止。
while和repeat的区别是:while先进行判断再执行循环体,如果一开始条件就不成立,那循环体一次都不会执行。repeat是先执行一次循环体,再作判断,换句话的意思是:repeat的循环体至少会执行一次。
在用while和repeat的时候,一定要明确写清楚表达式的条件,并且保证条件一定会成立,否则就会造成死循环。所谓的死循环是指条件一直成立,循环体会一直执行,直到计算机资源耗尽为止。当然,在这之前Praat软件都会出现“未响应”的状态,也就是平时我们说的软件卡死了。
这里只是说明了一下循环的基本语法及给出了一些简单的例子,并未对循环内在的运行方式进行说明,如果想了解这内在的运行过程,可以联系我。此篇教程就先到此为止了。
原创作品,未经授权不可进行转载。