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 3_Python!帮我做一下选择呗:父与子的编程之旅 学习笔记(5) 2018-07-10...相关推荐

  1. python图片表格提取算法_python识别并提取表格中的文字--Apple的学习笔记

    此文为的后记.读者可以参考https://www.jianshu.com/p/b85667a4ef76 用到的python文字提取库pytesseract.用pip install pytessera ...

  2. B站python教程“清华大佬终于把Python讲的如此清新脱俗!保姆级教程从入门到精通”视频学习笔记p1-p85

    1.python脚本的格式:hello.py 其中hello为脚本名,py为脚本格式,在终端可以用python hello.py进行脚本的执行 2.什么是头注释:不是为代码而服务,更多是被系统或解释器 ...

  3. Python学习笔记(40)~10个随机分布的坐标点

    10个随机分布的坐标点 Demo #!/usr/bin/python3 from random import uniform''' uniform(a,b)生成[a,b)内的一个随机数 '''r=[( ...

  4. python能帮我们实现什么用_你都用 Python 来做什么?

    「除了生孩子,Python 啥都能做!!!」这句话最近实在是有些火啊,难道 Python 就真的这么强吗?当然,不信咱们可以看一下数据 这是近期 TIOBE 公布的 2019 年 10 月编程语言排行 ...

  5. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  6. Java 3D编程实践_Java 3D编程实践——网络上的三维动画[学习笔记]

    评论 # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2006-08-24 23:41 gy # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2007-03-2 ...

  7. python 可以用excel做词云图嘛_word_cloud-用Python之作个性化词云图

    原标题:word_cloud-用Python之作个性化词云图 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业 ...

  8. 学习笔记-使用python进行数据分析

    最近在学习利用python进行数据分析,这些博客算是笔记吧,和大家分享分享,欢迎各路大佬前来指导 学习所用书籍:<python数据分析入门从数据获取到可视化>还有<利用python进 ...

  9. 潘石屹也要学编程了?Python之父:并非人人都需要了解计算机发生了什么

    大数据文摘出品 作者:曹培信 21世纪是编程的时代,几乎人类所做的一切,但凡跟互联网沾点边,都可能涉及到计算机编程,后台的程序跑出的结果通过大大小小的屏幕呈现在我们面前,人们已经觉得这是理所当然的. ...

  10. 数据分析师的编程之旅——Python爬虫预备篇(2)前端设计

    作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师. 有一个程序猿的岗位叫做前端工程师,当前市场需求量也不小,主要是以HTML5框架(H5).CSS3样式表和JavaScript语言(简称JS)为 ...

最新文章

  1. 翟天临首次回应毕业季被学生骂:能缓解论文季压力,就有意义
  2. 云栖大会变迁史(2009-2017)
  3. Python_62面向对象
  4. 百度超级链XChain(4)核心数据结构
  5. python 基于UDP协议的socket 报错:OSError: [WinError 10049] 在其上下文中,该请求的地址无效(绑定的ip要跟本地ip对应)
  6. Python 进程与线程小随笔
  7. python与正则表达式(part7)--re模块使用
  8. docker安装的PHPFPM容器Redis扩展
  9. 【Presto】http-worker-103 com.facebook.presto.execution.SqlTaskManager Switching coordinator affinity
  10. 项目管理: Maven 让事情变得简单
  11. 计算机原理的拼音,微机原理课程,the course of microcomputer principles,音标,读音,翻译,英文例句,英语词典...
  12. Unity3D之NGUI基础3:UILabel显示字体
  13. cenyos7安装 yum不可用_centos7安装fabric
  14. Learning-Python【1】:交互式环境与变量的使用
  15. iOS开发GCD(3)-数据安全
  16. shell 强制覆盖文件夹_如何强制robocopy覆盖文件
  17. 微信小程序如何在手机预览调试
  18. 关于学习的认知方法 | 九七的奇思妙想
  19. 线上实习 牛刀小试——增删改查
  20. navicate Cannot create file ... 系统找不到指定的路径”问题解决

热门文章

  1. 在MAC上安装mysql
  2. USB转TTL连接ESP01S
  3. 多用户微信多级分销系统源码php,PHP微信多级三级分销体系源码 领取宝微信双领取_源码下载...
  4. XenCenter6.2 配置ISO库
  5. esxi6.7封装nvme驱动
  6. 军工产品检验标准有哪些?军工产品检测机构报告
  7. 信息安全工程师软考——第一章 网络信息安全概述笔记!!!!
  8. 三菱 MX COMPONENT下载及安装测试
  9. keil5IDE 编写流水灯
  10. C# 登陆验证码工具类VerifyCode