00:01
大家好,欢迎大家继续收看上硅谷的云计算课程,我是沈超老师。那么这节课呢,我们来写一下四则基础运算的这个基本的第一个运算题,那我上节课说,我说要求大家来写一个这个四则运算的这个算这个计算器,对吧,那各位这个啊,其实我们现有的知识还不足以写一个完整的东西出来。啊,但是基本运算功能已经可以做了啊,但是需要还差一点点小功能,我待会儿补一下就可以了,那有些学员说老师这个运算器还有写吗?我一句话就可以完成,为啥看,其实前面我已经举了两个计算器的例子,那我们来看看第一个计算器,我们是不是用的是这个DO1DO2的方式来运算呢?对吧,所以啊,我们就有学看,哎,我写这个COUNT31个这个运算器第三个。那有人说,老师这还不简单,我还用写这个吗?看着我直接干嘛?呃萨,或者就是这个结果就是这个值这个。
01:07
那纸咋说,然后塞我上回啊,我就说我写计算器,结果有人说老师我就把结果都是这个,呃,都是这个萨,然后他就没有兴趣了,我这个英文试烂点啊,这个数值怎么说。啊,数值。Number啊,不是number,那就用value吧,我们值结果用value好吧,Va,然后呢,Va Lu好,VA6等于,然后呢,看到他就说他就这样来运算了是吧。呃,这个什么到了双小括号竖式运算对吧。到一到2DOLLAR3,诶,然后输出IO的这个Y6的值好。他觉得这个值很棒,为啥他为啥这样,首先我们先说啊,他是按照这个。
02:01
第一个计算题的脚本,这种结果这个思路来写了,这块不是要求你输到一到拉输数字吗?然后没有要求你输这个计算符吗?那我先在这里看看,看看过三。这里面我DO1让你输数字,DO2输数这个这个运算符,DO3再输个数字,直接不就有结果了吗?我试试,哎,我就说各位,首先我们先试试这个东西能用吗?看看它3111。加三三好啊,看起来好像没问题啊来那要那加可以啊,那五五我们除一下这个这个这个比如说五吧,那看也行啊。诶,这不就完成了吗?这多方便啊,一条一,其实我这还写了两行,其实直接就直接A口输出这个结果就行了,不一定非要负变量值啊,我就我说我为啥写两行,目的还是让你看得清啊。
03:02
这多好,这还用写啊各位,我说这个不合格原因。DIY。我普通用户怎么会知道这里面要输三个值,第一个是数字,第二个是运算符,第三个是数字。你没有任何提示,我无法判断,这是第一件事。第二件事。我普通用户怎么会那么听话?你让我输数字,我就输数字。你让我数运算符,我就数运算符。我凭什么这么听你?各位。我们一直都在说啊。当我们写程序的时候,要尽量是避免出现bug,什么是bug?就是漏洞、臭虫啊,那怎么叫bug?最典型的就是这个,你让用户输入,你首先要做的第一件事就是我要判断用户有没有输入。他要没书怎么办?我是不是就要终止程序报错了,不能让他执行下去。
04:04
然后呢,然后还要判断他输了东西符不符合规则,比如说我让他输数字,他到底是输了个数字,还是打了个ABC,还是什么,干了点别的事。我还要判断他有没有符合我的要求。所以各位。如果一旦有用户输入。他就绝不能只是你就想当然的认为他会按照你的要求来说这个事儿,在实际中是不可能的,而且我们说其实我们很多一些。这个漏洞我们一般都理解啊,网站只要是允许用户上传,这个后门就没办法避免,理论上都是这样的,所以你何况你检测了都还难以避免出现问题,何况不检测,所以这样写,表面上看起来结果是能用的。实际上这个是绝不可以作为这个程序使用,这样写绝不行,各位我在说什么啊,我现在讲的这个东西,就我在分析为什么这样不行,那我就待会儿分析,我会我们要那要怎么样才能行,那你小心啊,这都就是我们所谓的编程思想。
05:09
各位,什么叫编程思想?就是我在把我怎么想的思路告诉你,当然我的思路不一定是最好的思路,但是我就说这是我的编程思想。你们要学的就是为什么要看清楚这种思路不行,然后如何来建立正确的思路,这个是大家,这就是辩证思想啊,明白。当然每个程序的思路是不一样的,我后面讲每个程序的时候,我都会尽量的把我的思路说清楚,希望给你给一个启发,那这个思路不行,OK。这个肯定是不行的,那这里也提醒你们,只要在程序中,如果只要允许用户输入,就一定要判断这个输入是不是正确的,否则不能运行,不能继续去这个程序不能执行。所以。这种写法COUNT3肯定是不行的,这个不行,因为它参照的思路是这个,那我们前面是不是还写了一个COUNT2啊,你们看看。
06:04
这个是不是,就是首先他是不是有歧视了。要求你用户输入数字一数字二对不对,那这个时候呢。我们是不是直接执行的是加号,那我现在怎么办呢。我现在是不是就是要判断一下是吧,我是不是还可以要求它输入一个运算符,那COUNT3可能就是一个和这COUNT2可能是一个合理的方法,我们一直说啊,应该用RAID来接收用户输入,对吧,因为它有提示,那我们来写一下COUNT4啊。各位,这就是运算器的最终脚本了,不行,还不是,我待会儿告诉你为什么,那我们写一下。哎,各位,我为什么把一个运算器反复写几遍,我用不同的思路,不同的方法来写,其实啊,这都是干嘛我们建的,这其实基本上除了哈word就是我们建的第一个脚本了,我反复写的目的就是告诉你为什么这个脚本这样写不好,那样写就合理,对吧,其实也是在想让你们把第一个程序做好,或者说慢慢的建立变成思想,再一个也是说什么。
07:11
也交给你们,你们也是干嘛先写一遍,隔一段时间发现有问题回来再写一遍,哎,甚至一个程序写好几遍,慢慢你才能建立这种思想啊,那好,我们先来第一件事,先接收瑞杠气,等待30秒杠P,然后呢干嘛?Input number1输入数字一对吧,把它放在NUMBER1变量read-P 30秒杠P,然后请你输入。Input number。请你输入数字二对吧,放在把数字二放在数字二变量,然后呢,请你输入什么等待30秒,我们还要求它输入什么加减乘除符号了,对吧,Please。
08:00
Input opera。啊,查查一下查一下,既然写我们就这个杀。我们尽量写的合适,Operate op。Op,好,那这个时候我提醒他了,我只允许你输入,要不然就是加,要不然就是。呃,要不然就是减,要不然就是乘,要不然就是除啊。这个诶,那这个不行啊,这个除也是这个符号,那就不要这个分割符了,就请你输入这四个里面输一个,哎,那这个时候呢,我把它放在变量opera当中,Opera这个变量当中可以吧,这我就随便编一个对吧?当然啊,如果我们愿意,还记得我们在讲read的时候吗?Read。我们说干嘛稍等,我们说我们是不是可以通过杠这个S变量,我们是不是来指定什么,它这个输入是杠N变量,指定它的这个输入的这个字符个数,如果我这里只让他输一个,我完全可以在这里再加个杠N1对吧,我只允许你输一个数,输完我就会跳转,OK好了。
09:15
这三个接收有,那现在的问题在于。我是不是要通过它的这个运算符号不同而进行不同的运算,加我是不是进行加运算,减是不是进行加减运算?所以现在有一个巨大的问题,就是我需要判断这个变量当中的值是什么。对不对,那这就是逻辑判断了,各位。这个东西。我们还没讲。所以我说一下判断使用中括号。然后呢,我如果要判断两个数是不是相等,或者两个值是不是相等,好吧,双括号里面写变量名。哎,我这个opera当中变量当中双等号等于什么,等于加,我就执行后面的内容。
10:04
诶,各位,这就是判断方法了,看来不是单等号,我们判断两个数是不是相等,或者两个字符是不是相等,用的是双等号,原因变量赋值使用的是单等号,为了跟变量赋值区分,我们的判断一般都是用双等号,这不是12特特有了我们绝大多数程序,其实如果做两个值判断都是这样的啊。好了,那现在的问题是我判断它是加号。对吧,我应该怎么办,我是不是就要进行数值运算,那这个时候是应该通过if语句来完成,就是判断一个条件成立,那么在执行这个功,这执行加法运算,但是我们还没学这个,那怎么办?老板。考验你们对Linux熟悉程度的时候来了什么?还记得这个吗?双逻辑命令一,如果正确,则执行命令二的操作。对不对,那我们现在命令一是正确的,它如果是加号,那我们就干嘛,直接就IQ输出这个。
11:08
I口直接输出什么,到了双小括号数值运算不用再赋值了,可以啊,我不用再做数值,这个赋值我直接输出了,那么就是到了NUMBER1。加Dollar number,我直接运算就行了,把它的结果和打出来。那有了加法,剩下的就简单了,照着抄。好,那如果它的数值是减。那么就把这个符号换成减号,让他俩做减法运算,那如果这个符号是千2。那就把这个符号换算成乘法符号,让他们做乘法运算。那如果这个符号是除。除,那么就让他们做除法运算,哎,好了,就这么简单,各位。
12:01
这个脚本和我们前面讲的那个刀一,刀二,刀三有什么区别?前面是不是直接把DO1 do2 do3合起来,直接就就行了,这个区别区别在哪?我们判断的这个运算符是不是合法运算符。看到了,如果我这里要求你输个加减之数,你没有输,你输了A,你输了个字母A,反正不是加减乘数,那这个时候我问你这三次判断,四次判断是没有一个合格的,那后面的程序是没有一个会执行这条命令,其实应该就会干嘛直接就报错。或者说他就没有任何输出,他就会没有任何输出,对不对,那前面这个呢就不合理了,我们没是不是没有经过任何判断,这个家伙是不是就不对了,他是不是想输什么都行,所以我们这个脚本比前面这个DO1 do2 do33个符号放在一起,好在我们判断了运算符。只有是运算符,我们才会这个正常执行,OK。
13:01
那各位。各位。我们这个脚本的缺点在于,我们没有判断NUMBER1和number是不是输了纯数字,也就说我们还没有判断这两个数字就是数字是不是纯数字,我们只判断运算符,没有判断这两个家伙是不是纯数字。你让我输NUMBER1,我就输这个数字吗?我输了ABC怎么办?那他是不是就运算不了了,这是不是就这就会出现bug,所以。我们第在最后一次再写这个运算器的时候,我们就会判断这两个家伙的什么。是不是纯数字,那为什么现在不写?原因太多的内容还得讲。这个东西要等我们讲完if语句之后,我们才能真正的来判断它俩是不是运算符,OK,暂时还不行,所以我们暂时只能写这样一个半成品,我们这个半成品比之前那个好处在于我们判断的运算符是不是加减乘除。
14:02
好,那我们先执行一下看看啊,因为这个大范围写有可能有笔误啊,我们先执行一下。看看四点,那我们执行看看四,他问我要求输入数字111,数字二,输入加号,好,直接结果是三三,结果出来了,好,那这里没有换行符,所以我们干嘛。没有换行,我们在这里干嘛?加个换行符IO-E。反斜杠方。对吧,让他换个行,要不然它的结果直接跟在这后面对吧,行,那我们再来一遍。看到了数字二二,然后呢,数字五五,然后出个符号是乘好了,这个结果是不是正常了,对吧,加减乘除基本功能现在是不是有了,但是啊,这个脚本还有一些东西要调一下,为什么。现在啊,虽然我们说我们暂时可以不用判断这个对吧,我们现在现有能力现在判断不了这两个是不是纯数字,那我们就先可以不判断,但是如果这里我要没有算这个运算符呢,那他会不会报错啊各位那我会啊,那我们试一下。
15:16
看呢,我在这里执行这个看法二。三三我没有输入运算符,输了个字母A,你看。他没有任何输出,因为四个符号都不是,所以这四条语句是不是都没有,这个这四条语句是不是都没有。执行,但是后面也没有报错呀,那怎么办?那我们这样写一下,看着那我现在是不是就想了啥。我如果这四条都没有执行,我是不是在后面报错一件事,报错一下对吧,各位,那我们在这里干嘛,就输出一句话,意思是这里请你输入啊,请输入我我我写我写这个什么啦,拼行了,输入正确。
16:00
运算符。啊,Opera好了,就就算。好,我们写这样一句话对吧,但是你会发现一件事,首先啊,我如果我们先试一下看1122A,诶,如果输的是一个普通,不是正确的,他没有给结果,是不是确实打赢了报错对吧。但是这个东西二在哪看到112加号,我输了正确运算符,看有结果还有回报错。人家。原因。各位,原因在于我们的程序是顺序执行的,也就是说从上到下,第一条执行完执行第二条,第二条执行完执行第三条,依此类推。那我们到这儿看opera,它判断是个A,它不是这四个数字里面的任何一个。对不对,那这四条判断完是不是都没执行,但是我问你程序到这儿了吗。最后一条是不是也执行,因为程序是顺序执行的,那怎么办?
17:03
那怎么办?那我是不是应该这样考虑,如果它执行的是加号,比如说这条符号执行了。那我是不是就应该在这里终止程序,不用让他再去判断加减乘除了,哎,我要求你输入一个符号,你不可能既输个加又输个乘,对不对,你是不是只能四个里边是不是输一个,要不然是加,要不然是乘,所以我如果判断了它是加,我就可以终止程序了,我没必要再往下执行了。对吧?如果我判断是乘后续的程序是不是也就不需要执行了,换句话说,你这里如果符号输对了,我到这里执行完程序就终止了,没必要再执行这行报错,只有你的opera输的不是这个,几个符号这些都没执行,最后这条才会执行,那怎么终止程序呢,各位。首先,我们。还是需要你干嘛。在这里。加入一个双向的具。如果前两条命令都正确执行了。
18:02
也就是说这是加号,而且运算了,那我干嘛e sit退出程序就行了。就通过EST终止程序执行看见了,那这里后面照着敲就行了,如果第一条程序没有正确执行,第二条执行了也正确去出,那依次类推照着敲那就行了,我们试试。呃,按退出程序,如果第四条执行了,我们也可以退出程序好了,那这个时候看啊,我们首先。各位输入正确的这个数值加减乘除,它不再有最后一行报错了,对吧?因为加以判断正确,这个程序就直接退出了,对吧?那乘呢,我们试试啊。哎哎,又输错了,输成加了来啊112乘,哎也是可以了,对不对,换句话说,我们再看一下程序啊,看到四。但这。如果这是朝。前两个是不是都没执行,既然没执行ast是不是就不会执行,这三个一判断支持成这个正确执行了,它是不是也就执行了,所以不会有报错,对吧?但如果我把这个符号。
19:11
112,我打了个A,那前四个程序都没执行,所以是不是就会有最后一句报错对吧?好,这样写完各位,我们这个程序,这个加减乘除运算就基本完成了。当然我再说,这个程序的缺陷在于没有判断这两个值是不是纯数字,没判断的原因,我们现有的知识还不足以写这么复杂的东西,这个要等我们后面再补充来写这个功能,各位这也教你们啊,这就是写程序的思路,为什么有人说我写了一个程序,隔了半年回来看,发现我写的跟狗屎一样,为啥程序就是这样不断的补充补充这个随着你的能力的提升,你会发现越来越多的问题,当然我再说。12、程序不用考虑什么间接。
20:00
我一直在说这个事儿,所以我写个程序,如果给编程工程师看,他们会觉得很笨,我就是一条一条尽量思路清晰,目的其实还是为了给运维工程师来做一个例子,我想告诉你们,我们不需要写太过精简的程序,能实现功能就好,只要思路是清晰的就行,OK,好了,那现在我们这个程序跟前面写的程序的好处在于。我判断了这个值是不是正常符号,如果不是,我是不是也有报错对吧?好,各位,这是我们第三遍,这应该是第四遍的,这个加减乘除计算项,我们后面还会最终写一个完整版,OK,好了,看看我写的这个东西和你写的这东西有多大的区别。你就应该能理解,这就是我们所谓的编程思想分析,你要尽量,当然我不是说我的思想就一定是对的,但是我就说你尽量要把这个程序想的完整。就是说你该有的功能要有,你不能说我就DOLLAR1 dollar2 dollar3这样三个数,直接直接往上一放,指着用户就是来碰碰运气,往里输,这是不可能的。
21:07
OK,好,各位,那我们这个程序的练习题就到这里啊,大家呢,如果没写出来了,你后边你照着抄两遍,熟悉了自己背着写,能写下来才算过关,OK啊,默写下来才算过关。好了,那这节课就到这里,我们下节课再见。
我来说两句