Praat脚本编程中文教程:循环语句for/while/repeat的用法

分类:Praat
 标签:Praat脚本,Praat中文教程,Praat编程
   修改 | 阅读(1946)| 评论(1)



在脚本编写中,我们经常要重复性的做一些计算或者执行某些命令,如果重复的少,那我们可以写多行脚本来实现,但是如果重复个百八十次,那每一次就写一句脚本,那是不现实的。

在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软件都会出现“未响应”的状态,也就是平时我们说的软件卡死了。


这里只是说明了一下循环的基本语法及给出了一些简单的例子,并未对循环内在的运行方式进行说明,如果想了解这内在的运行过程,可以联系我。此篇教程就先到此为止了。


原创作品,未经授权不可进行转载。




【曾经沧海】评论于:2020-8-14 8:57:21    [回复本评论]

您好!我想知道三个循环的内在运行过程。这三个循环输出的结果是一样的。

#1.for循环

for i from 0 to 10 

appendInfoLine:i

i=i-0.5

endfor


#2.repeat循环

i=0

repeat

appendInfoLine:i

i=i+0.5

until i>10


#3.while 循环

i=0

while i<=10

appendInfoLine:i

i=i+0.5

endwhile


您的昵称:*
QQ登录(无需注册直接登录可进行回复)
您的邮箱:(填写邮箱,如有回复可进行邮件通知)
验证码:
点击刷新