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

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编译器的帮助下,将新插入的程序,用制表符重新编辑好缩进,结果——正确了!

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容