00:04
上周啊,我们把这个自动售票机做到这个程度。你看我们现在这个自动售票机呢,它读入了用户输入的这个数字之后,它会判断这个amount是不是大于等于十,如果是足额的,那我们就打印出车票来啊,如果不足额,我们就就就就再说,我们至少做到这个程度,我们知道我们如果想要用这个程序的话,我们可以让他。运行起来,然后呢说啊,那我们投币12块,然后呢,他会说啊,打印出一张票,然后找你两块钱等等,可是如果你要再买一张票的话,你看因为我们这个红灯已经灭了嘛,这个程序已经结束了嘛,所以如果你要再买一张票,OK,那我们还得再来重新运行一下,那如果我现在呢,这个投进去的钱不足,比如说就投了个五块钱。啥也没有了。我们知道真正的自动售票机不是这么工作的,对吧,你你不可能说那个自动售票机,你走过去,呃,投钱投钱进去买了张票出来之后呢,这个机器就关机了啊,然后呢,你必须再去搬动一个电源开关什么的,然后他再重新起来,然后再给你买一张票,然后也不可能说我如果钱不够就悄无声息就没了。
01:17
啊,我们见过的大多数的机器都是一直在运作着啊,除非你真的去把它电源给拔了啊,否则的话它一直在工作着啊,怎么能够让我们的这个程序一直的工作着呢?也就是说我们其实希望的是说,在我们的程序里头呢,从这句话开始,一直到这句话,他得一直不停的工作着,我们现在的这个程序的写法这样子写,说我们在这个main里头做一个初始化,然后做点什么,做点什么,做点什么,然后他就是结束了这个括号,这个括号就是那个命的结束的括号,你看当我把光标停留在这个大括号的地方的时候,它对应的那个开口的大括号,那就会出现一个框框,这个框框表明说那是它对应的那个大括号,对吧?所以呢,我们的程序做完一个判断,打印点东西,然后我们就结束了。
02:11
我们希望的是这些话能够反复的,不断的。在那里重新做,重新做,重新做,我不需要退出这个程序重新运行,我就在这个程序里面能够给我打很多张票出来,我要怎么能够做到这件事情呢?方法蛮简单的。我们既然已经把这些行都已经选中了,打一个tab。你选中的那些行上面去打一个tab,它会把这些行往右边推进一格,因为我们现在需要在这儿增加一个新的结构while true。当然,有开口的大括号,必定还有对应的结尾的大括号。我们做完了这件事情的意思就是说,我们要让while后面的这对大括号里面的句子反复不断的在那里重新运行。
03:01
永远也不停下来。我们来试一下跑这个程序会怎么样子,我们来运行它。请投币,那我投10OK,他说啊找临时,然后请投币又来了,这个时候呢,这个红红方块还在,表明说我们的程序还在运行着,好,那我们再投币12。少零两块钱,诶看上去不错哈,那我现在再投币呢,五没了。啊,然后那五块钱去哪了呢。也没说是吧,那我那我再投B5呢。照说我我投了五块钱进去,我又投了五块钱进去,加起来我有十块钱,他应该能够能能够给我把这个十块钱的票给打出来了,对不对,他没有。但我们还缺点东西对吧,我们现在这个程序还缺点东西,还有一件事情是这个程序一直运行的,什么时候能结束呢?我们现在结束这个程序,唯一的办法就是这个红方块去点一下。才能把这个程序给结束下来,但某种程度上来说,这也正常,比如说你任何一个图形程序,你要停下下,停下来,你要关掉它,都是脚上面那个叉叉去点一下,然后它停下来了对不对?你就把它想象成说这是脚上那个叉叉停下来,可是这个程序没有解决的,是说我多下来的钱怎么办对吧,我找零时找你了是吧?然后我如果不够的时候,不是有有余额应该要留下来吗?那这个要参与到运算里头去,所以实际上呢,是我们在这个。
04:26
如果amount是大于等于十这个条件不成立的时候,我们该做什么啊,所以我们得调整我们的程序,说else的时候我们得做点什么事啊,当然诶,别忘了我们的风格问题哈,那else的时候呢,我们得做什么呢?我我们我们得让呃这个时候呢,我们不能只用amount来表达这个事情了,因为amount呢,用来表达的是我这一次收进来多少钱,那么我得用另外一个变量来表达,说我需要记录下来说呃里累次啊,收收进来多少钱,我们可以有一个变量叫做balance balance呢,就可以让它等于呢。
05:03
Balance加上现在的这个amount,当然最后有一个问题,你看现在,诶他说诶你你你balance没有定义过吗?当然这个叉叉的意思就是我没有定义过balance,好吧,我们需要有一个恰当的地方说我的balance在哪儿。然后呢,我们还需要有一个恰当的初始值啊,说我们balance等于零,所以呢,最开始的时候余额等于等于零那。当你投币的时候,我们现在是判断说你这次投进来的钱够不够,其实呢,我们就不应该是这么判断,而应该判断的是说你的那个balance是不是足够,那么balance呢,你投进来的钱当然就应该把balance家这件事情放上来,所以其实呢,这个家这件事情是应该在这儿做的,每次一投钱进来,那我就balance里面呢,就要加上我的这个这次的amount啊,这次投了多少钱,如果每次的这个balance大于十大于等于十的,那我就可以去打印出车票来了,那然后呢,然后呢,当然我计算找零的时候,我不能拿amount来找,对吧,这是balance去减了十,完了以后呢,Balance既然我已经把钱都找你了,把票都打出来了,他就应该被清零,那到底我们现在这个else要不要做事情呢?其实我们发现说else是不用做事的啊,没事,呃,这我们的思路就是这样一点点走过来的,我们我们最终会去找到一个合理的方案来显示我们的程序,不见得说我们曾经走过,曾经试过的每一个每一条路径都是正确的。
06:28
OK,现在我们有了这样的程序,你看我们再来从头读一遍,我们一开始的时候呢,Balance是零,就总的余额是零那。当他投了币以后,我们就要把他投进来的钱加到balance里头去,如果balance是大于十的,也就是说他要么是累积的,要么是这一次投的钱已经大于等于十了。我就把。Balance减去十,把票出了,把balance减去十给了客户,然后呢,我把balance就清零了,如果没有的话,那么balance就带着这个amount继续下去了,那到下一轮他再投的钱进来呢,又会加到balance里头去。
07:00
一直到balance能够大于等于十,我们才会出票,否则的话呢,我们会一直在继续着,而一旦出过票,我们还会再继续回来。诶,我们来试一下,现在这个程序运行起来是不是挺像回事儿的。请投币,如果我们投一个五元,还说请投币再投个五元,OK,他给我们打了一张票出来是吧,然后找林时零,如果我请投币投的是12元,OK,找零是。两元。当然。票也给你了,早零也早零了,那么他的balance应该现在是零了,如果我第一次投币七元,第二次投币五元。他说票价是十元,这张票给你了,所以十块钱他已经用掉了,然后再找你两块钱。这就挺好了,这个while在这做的事情就是循环,我要让while后面带的这些东西,在while后面这个大括号里面的句子能够不断的重复进行,这就是玩偶语句做的事情。
我来说两句