美文网首页
Python!帮我做一下选择呗:父与子的编程之旅 学习笔记(5)

Python!帮我做一下选择呗:父与子的编程之旅 学习笔记(5)

作者: HelloFloria | 来源:发表于2018-07-10 13:39 被阅读0次

1. 第七章:判断,再判断

其实之前我也想过这个问题:要是每次都要我们告诉程序应该做什么,其实效率不高,并且解决问题的过程一定会变得枯燥。

程序,必须要知道自己接下来要做什么。

前提是,它要有基本的判断力,能决定下一步怎么走。这种技术我们称它为决策技术(decision-making)。

7.1 测试,测试

程序要根据一下情景进行设置:

(1)如果Tim给出正确答案,则加一份;

(2)如果价格满97元,则自动包邮;

(3)如果文件没找到,则显示错误信息……

这些我们都成为“决策”,而决策的第一步,便是测试:

(1)Tim的答案是否正确?是/否

(2)价格是否满97元?是/否

(3)文件是否找到?是/否

要让python理解我们的意思,要从两个方面入手:问题和回答。

后者很容易看出来,测试只能有两个正确的答案:是/否。

前者比较棘手:如何让python理解我们的意思呢?

我们可以换一种方式问:

    如果 Tim 的答案 等于 正确答案

这句话存在两个“变量”,一个是Tim的答案,一个是正确答案。假如它们是相等的,条件(condition)为真(true);否则,不相等,则条件为假(false)。

这种判断,我们称之为分支(branching)。而前面的如果,我们在python中用if语句来表达。

7.2 缩进

不要以为缩进不重要!有时它能影响整个程序的运行,具体例子请参考小结(3)。

7.3 if ==语句:测试两个值是否相等

注意这条语句最后的冒号

7.4 其他类型的测试:比较操作符

(1)一些常用的比较大小符号:

!= 不等于

<> 这个也是不等于(没那么常用,且python3舍弃了)

(2)一些特殊用法,比如:

if 8 < age < 12

这里用了两个小于号,可以限定age的范围;再比如:

if 8 <= age <= 12

这样可以包含8和12两个岁数。

(3)练习:比较数字大小

比较两个数字大小 皮一下,用了科学记数法:)

7.5 如果测试为假会怎么样

在测试中,需要考虑到许多意外的情况,以免出现bug。其中需要重点考虑的是if语句有没有包含所有情况。以下是一些可以避免出bug的方法:

(1)做另一个测试:elif

一个不行,就另一个:elif语句想要多少都行

(2)注意else语句只能放最后

7.6 测试多个条件

用if跟else语句测试多个条件。注意这里if里面嵌套了另一个if函数。 测试结果

7.7 使用and

使用and,将嵌套的if函数连在一起:

if age >= 8 and grade >= 3

这样就不用多写一行了。在代码复杂的时候应该很有用。

另外,还有很多方法简化多个条件的判断:

7.8 使用or

如果使用or,假如有一个条件为真,整个代码块就可以执行:

相当于设置了“准入条件” 皮两下:)

7.9 使用not

可以用not把比较倒过来,表示相反的逻辑:

可以看到,if not (age < 8)与 if age >= 8 这句代码,两者含义是一样的。


练习题

(1)检查一个数是否大于30,并且小于或等于40:

后来我尝试写一个自动划分成绩等级的函数:

但发现不行,多次elif并不能出现我想要的结果。 暂时能实现的是判断是否得a

(4)判断输入的字母是否为特定字母:

需要注意:1,用两个等号,而不是一个;2,字母用单引号

(5)写一个自动计算折扣程序:账单没超过1000元的打九折,超过1000元的打八折:

一开始我就想当然地噼里啪啦一大堆码上去,结果提示float错误:

果然还是会忘记float啊。。

接下来,不仅加了float,还在第一个条件上加上了print,要不然显不出打九折的情况:

果然是细心使得万年船!

(6)一个足球队在寻找年龄在10到12岁之间的小女孩加入。要求写一个程序,询问年龄与性别,并且要求人性化,如果不是小女孩就不用再询问年龄:

下面是一开始写的,首先不能用gender != f 来表示,因为加入这样还是会显示后面“What's your age”的提问;另外还是漏了age应该用int函数来赋值,否则前面rawinput函数获得的字符型值,是不能够直接跟age这个数值进行比较的。(汗,这些细节好磨人啊!)

别抄这个,错的 把该改的改了 上面是错误的,下面是正确的

(7)我们正长途旅行中,现在差不多要到一个加油站,距下一个加油站还有200km。

编写一个程序,确定要不要在这儿加油,还是到下个站加油。提示:

1⃣️油箱有多大?(单位:升)

2⃣️油箱有多满?(百分比)

3⃣️汽车每升油可以走多远?(L/km)

以下是第一次的编程:

(1)没有将百分比处理好;(2)最后判断大小时错误了 结果完全是错的~ 这是第二次的编程,分别处理了两个bug 第二次的结果,正确了~

值得注意的是,这道题还出了一个附加要求:因为油表容易出现误差,所以要求加上5km的缓冲区。一开始我不懂这什么意思,跟老公讨论后,明白了是在油表处减去5km,有点像是做最坏打算的意思。运行过程和结果如下:

啊,今天终于结束了~

小结

(1)比较测试,和关系操作符密不可分,像是重新认识了大于号、小于号和等于号~

(2)这次的练习都比较实用,而且应该说是太符合实际了,导致我一下子转不过弯来,不能很好的用程序思维去分析问题。今晚的练习异常艰苦,很多次出现bug都不能分析出所以然,——但既然选择了学习,那就要不断的去挑战自己的舒适区,能学到东西就是最好的状态。

(3)后来我自己尝试写了一个简单的根据密码判断能否进入的程序,

第一遍尝试解决密码模块,如下:

这里if后面没加冒号,然后也漏了else的情况

第二遍,修正了bug:

这是第二遍,改正了前面的bug,但还没实现核心功能

接下来,要实现的是中间的模块,先加了注释,然后将代码直接粘贴进去:

当时觉得万无一失了

然而,运行结果是:

出现了即使密码错了,也能进入程序的bug

百思不得其解,最后在python编译器的帮助下,将新插入的程序,用制表符重新编辑好缩进,结果——正确了!

所以说,缩进不对,程序崩溃! 正确的运行结果

缩进是一个非常小的问题,但它能够影响整个程序。同样,一些小细节假如不注意,在编写大程序时就会有非常多的漏洞。魔鬼在细节!

相关文章

网友评论

      本文标题:Python!帮我做一下选择呗:父与子的编程之旅 学习笔记(5)

      本文链接:https://www.haomeiwen.com/subject/avufpftx.html