学什么东西,往往并不需要脑袋聪明。可是需要“头皮很硬”──因为你总是需要“硬着头皮读/做下去……”
新建一个AutoIt文件,将其命名为Testing9.au3,输入以下代码:
$n=InputBox(“Input”,”To what number do you want to add up?”) $r=0
For$i=1To$n
$r=$r+$i
Next
MsgBox(0,”Output”,”The sum from 1 to “&$n&” is “&$r)
请按F5查看执行结果。
先是跳出一个含有输入框的对话框,要求你输入一个数字,比如,1024:
而后跳出一个对话框,显示计算结果:
Testing9.au3看起来像是个真正的程序了,因为它包含了所谓程序的三个重要组成部分:
- 输入
- 处理
- 输出
所谓程序,就是一系列的操作说明──是你(作为程序的作者)用计算机能够理解的语言编写[1]的。而后计算机去执行这些操作。在操作过程中,有可能需要你(作为程序的用户)提供一些数据(输入)以便进行进一步的操作(操作),也有可能为了满足你(作为程序的用户)的需求而向你提供一定的反馈(输出)。
将来无论你去学哪一种新的编程语言,记住:第一件事情是去搞清楚它的“输入/输出”的方式,因为你作为程序作者也好,作为程序用户也罢,必须与计算机“互动”。在此之前,我们一致“硬着头皮”用ConsoleWrite()这个函数,现在我们又有了一个看起来比较“现代”的输出方式──MsgBox()……
Input()和MsgBox()都是函数(一个你到目前为止还必须“不懂装懂”的概念)。你可以打开AutoIt帮助文件,去看看这两个函数的文档页面,看不懂没关系,但多看几遍,在没有任何人为你讲解的情况下,你都会渐渐明白更多。现在要知道的是这些(请控制一下自己的好奇心,暂时只要知道下面这些就够了,以后有的是机会回来弄透──也必须回来弄透……):
在第1行,等号右边的Input()这个函数,相当于一个表达式,它的结果就是你在输入框里所输入的内容;于是,这一行代码执行过后,你输入的是什么,变量$n的值就是什么。Input()里面有两个字符串,第一个是用来定义显示在对话框标题的(在这个程序中,我们将其定制为“Input”;当然,你可以随便改改试试看);第二个是用来定义对话框面板上的内容的(在这个程序里,“To what number do you want to add up to?”)。
在第6行,MsgBox()这个函数的执行结果是跳出一个对话框;括号里的第一个参数是“0”,它定义的是“对话框类型”,第二个参数“Output”,定义的是对话框的标题;而第三个参数,是一个表达式,把以下几个字符串合并起来,显示在对话框面板中:
“The sum from 1 to “
$n
“ is “
$r
现在的问题在于,万一这个程序的用户不是你自己,他在输入框里输入的不是正整数怎么办?比如输入的是“ten”,或者,“-10”……你自己不妨反复试试看这些“非常规输入”。

至于最终结果为什么是“0”而不是别的什么,可以暂时不去理会──反正结果不是我们所预期的。
现在的问题是,作为程序作者的你,如何确保程序用户输入的是正确的数字呢?
让我们在第一行代码之后补上几行(Testing10.au3):
$n=InputBox(“Input”,”To what number do you want to add up to?”)
If Not StringIsDigit($n)Then
MsgBox(0,”Warning!”,”You didn’t input a valid number. Press OK to quit…”)
Exit
EndIf
$r=0
For$i=1To$n
$r=$r+$i
Next
MsgBox(0,”Output”,”The sum from 1 to “&$n&” is “&$r)
第2行里的StringIsDigit()又是一个函数。如果作为参数传递给它的字符串全部由数字构成,那么这个函数将返回“True”这个逻辑值;否则的话,它就返回“False”这个逻辑值──暂时了解这些就够了,请你硬着头皮接着往下看……
第2行到第5行代码,是一个If…Then的“判断分支”语句,将其翻译成自然语言就是
如果$n不是数字的话,就显示对话框,提示用户“You didn’t input a valid number. Press OK to quit…”,而后退出程序
否则的话(即,如果$n是数字的话),就跳过Then…EndIf之间的代码,继续执行EndIf之后的代码……
可是,这样还是不令你满意,因为,你要的实际上是“如果用户输入的不是数字,那么就让他重新输入,直到用户输入正确数字,则为用户显示计算结果……”
注意这里的“直到……”,用编程语言表达的话,就是“用一个循环,直到某个条件满足跳出循环”。请阅读以下的代码(Testing11.au3):
Do
$n=InputBox(“Input”,”To what number do you want to add up to?”)
If Not StringIsDigit($n)Then MsgBox(0,”Warning!”,”You didn’t input a valid number. Please try again…”,1)
Until StringIsDigit($n)
$r=0
For$i=1To$n
$r=$r+$i
Next
MsgBox(0,”Output”,”The sum from 1 to “&$n&” is “&$r)
至此为止,你已经看到了“循环”(Loop)和“分支”(Branch)的功用。许多年之后的今天,我还清楚地记得当年我学会这两个“简单”概念之时的震惊:本质上来看,所有程序的最重要部分就是这两个概念构成的──以后你会渐渐明白,绝大部分的计算/运算,最终是为了“分支”和“循环”服务而已;也就是说,用“循环”和“分支”可以做任何事情……从逻辑上把所有任务抽象为这么两个简单概念,真是美丽到了极致。
照例,我们又暂时忽略了许多重要的细节──我知到你的“强迫症”快要发作了──不过,我们还要硬着头皮往前走很久才行……
Footnotes:
1.在这里,当然是AutoIt v3。在你的计算机安装AutoIt v3之前,你的计算机是不可能
理解.au3文件中的内容的……
