https://mp.weixin.qq.com/s/NufIuwsHHXITgX5g-1oREQ
Hi,很高兴见到你,恭喜你成功抵达第三关!👍
前两关中,我们跟着至尊宝,学会了使用 Python 基本语句,调用 Python 的内置函数 print()
;跟着孔明一起,理解了数据类型的概念,包括字符串、整数、浮点数这三种类型。
我们再来通过上一关的知识点小结回顾一下:
在开始今天的课程之前,咱们先来做道题热热身吧~
单选题
考验眼力的时候到了!请仔细阅读下面这段代码,选出其中 没有错误 的代码。
恭喜你答对了,真棒。看来第二关的知识已经难不住你了,准备接受新的挑战吧~
今天我们将开始学习程序逻辑——条件判断。学会了条件判断后,我们的程序将不再单一,变得智能起来!
前几天老师的智能家居设备中新添了一样小玩意儿——空调伴侣,能根据室内温度的高低,控制空调的开关。
我的设定是,如果室内温度低于 32 度,就不做操作,如果室温高于 32 度,就自动打开空调。这个 如果...就... 的逻辑就是条件判断。
当今我们的世界到处都是智能设备,极大地方便了我们的生活,而 如果...就... 这种最基本的条件判断,就是这一切的基础。
编程世界也是一样,条件判断非常重要。Python 碰到表示条件判断的语句的时候,它会先判断是否符合条件,如果符合,那就执行对应的代码。
最简单的例子是,如果一个数字大于 0,就让 Python 打印“这个数字是正数”。
接下来我们一起进入《阿gan正传》的故事,通过阿gan的成长历程来学习如何让程序作出判断。
示:没看过《阿gan正传》也不影响课程学习哦。
阿甘,全名福瑞斯特·甘,从小只有 75 的IQ,他的背部骨骼长歪了,必须依靠支架才可以勉强走路,阿甘和妈妈相依为命。
老师用 Python 实现了一个IQ分类程序,运行代码,输入不同的IQ值,程序会输出对应的IQ等级。
你不需要弄懂代码的细节,直接运行你的第一个条件分支的代码吧!
拓展:一般来说,人口中的一半人属于正常和平均智力水平(得分在 90-109 之间),得分在 110 以上就属于高IQ者,即很聪明。据说,爱因斯坦的IQ是 160。
score = int(input('输入IQ值:'))if score < 80:print('智力很低')if score >= 80 and score < 110:print('普通智力')if score >= 110 and score < 140:print('智力较高')if score >= 140:
阿甘在学校里经常受到别的孩子欺侮,他跑着躲避别人的捉弄。
进入高中后,有一天阿甘被人欺负,拼命逃跑,无意间冲入了橄榄球场,他跑步的速度被球队经理看上,依靠这项技能阿甘竟然成功升入大学。
而当初如果阿甘没有“跑”的技能,他就无法升入大学,现在我们来通过条件结构来实现这个逻辑。
skill = '跑'if skill == '跑': print('升入大学,成为橄榄球队主力!')else: print('无法升入大学,过着不为人知的生活')
上面这段代码的含义是:如果(if)技能(skill)为(==)跑,那么打印出升入大学,成为橄榄球队主力!。否则(else)打印出无法升入大学,过着不为人知的生活。
怎么样?是不是读起来很轻松呢?Python 对编程初学者非常友好,只要你懂一点英语,就能轻松读懂基础的 Python 代码。
值得注意的是,在上面代码中出现了一个新的操作符,即判断相等符号(==),顾名思义,就是判断操作符左边和右边的值是不是相等的。
注意:很多人总是分不清 = 和 == 的区别,你一定要记住了:= 是赋值,== 是判断相等。
条件结构也叫分支结构,我们通过流程图的形式来理解上面的代码:
可以看到,在技能(skill)是否为跑的时候产生了分支,条件成立时走左边的分支,条件不成立时走右边的分支。
有了条件结构,我们的程序就“有了思维”,可以进行判断,不再单一地从上往下执行代码,而是可以根据不同情况执行相对应的代码了。
缩进
代码行的缩进决定了代码之间的从属关系。一些代码是否要执行,要听另外一些代码的命令。
这种“上下级”似的从属关系,就要靠缩进来判断。我们再来看一下之前判断是否超速的代码:
speed = 100if speed > 60: print('超速了')else: print('车速正常')
第 3 行和第 5 行都缩进了,因此它们分别从属于 if speed > 60: 和 else:,相当于跟在大哥后面的小弟。当条件成立时,if speed > 60: 后面的小弟便出来干活了。当条件不成立时,则 else: 后面的小弟出来干活。
else 和 if 都是大哥,属于同级。虽然 else 在 if 语句后面,但 else 是不用缩进的。
要注意的是,没有从属关系的代码间如果乱用缩进,也会出问题导致程序报错的哦,比如说下面的代码:
i =1 b =1# 报错:IndentationError: unexpected indent# 缩进错误:有不应该出现的缩进
缩进一般使用两个空格或者四个空格,但是一定要记住在上下文中保持一致,不能一会用两个空格,一会用四个空格。
提示:我们的课程里面统一使用的是两个空格。
下面老师列出了初学者常犯的缩进错误:
skill ='跑'if skill =='跑': print('升入大学,成为橄榄球队主力!') print('所有人都为他惊人的跑步速度欢呼!')else: print('无法升入大学,过着不为人知的生活')
上面第 3、4 行代码中 if 语句块里两行代码的缩进空格数不统一,导致程序报错。
skill ='跑'if skill =='跑': print('升入大学,成为橄榄球队主力!')print('所有人都为他惊人的跑步速度欢呼!')else: print('无法升入大学,过着不为人知的生活')
上面代码中 if 语句块下管辖着两个小弟:第三行和第四行代码,他们俩属于相同的层级,都要看 if 语句的“脸色”决定是否执行,但第四行代码却没有缩进。
skill ='跑' if skill =='跑': print('升入大学,成为橄榄球队主力!') print('所有人都为他惊人的跑步速度欢呼!')else: print('无法升入大学,过着不为人知的生活')
上面代码中第二行的 if 语句应该和第一行层级相同,并且管辖第三行和第四行,所以第二行应该取消缩进,和第一行一致。
要求严格的代码缩进是 Python 语法的一大特色。代码的缩进,标识着同一层级的若干行代码的开始和结束。
那么,我们就将上面的知识融汇贯通,来个练习吧~
现在你已经可以读懂 if 语句的结构了,接下来你需要将 skill 变量的值改为别的任意值(比如“无”),猜猜运行结果,然后点击运行,验证结果是否符合你的预期。
skill = '跑'if skill == '跑': print('升入大学,成为橄榄球队主力!')else: print('无法升入大学,过着不为人知的生活')
虽然刚刚的代码你已经可以读懂大概意思,但是语法细则可能尚未清楚。接下来,我们来学习 if...else... 语句 的语法规则:
if...else… 语句由条件和两个代码块组成,可以抽象为如下结构:
if 判断条件: 代码块 1else: 代码块 2
其中判断条件成立时,则执行冒号后面的 代码块 1;反之,如果判断条件不成立则执行 else: 后面的 代码块 2。
这里的判断条件一般使用比较运算符进行比较,常见的比较运算符有 ==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
在开车的过程中,如果开了导航的话,当超速行驶时,导航会提示我们超速了,其实这里就用到了条件结构。假如某条公路限速 60,我们可以写一个判断是否超速的程序:
speed =100if speed >60: print('超速了')else: print('车速正常')
注意:判断条件和 else 后面的冒号,一定不能丢掉,很多初学者会忽视这里冒号的存在。而且在第一关学过字符串的引号必须是英文的,这里的冒号也不例外,必须要用英文的哦~
细心的你有没有发现执行代码块 1 和 2 前面都有两个空格?
那这两个空格是必须要有的吗,还是说可有可无呢?接下来我们通过编程练习来检验下。
编程练习
现在我们把下面的代码里两个代码块中的空格都删除了,运行代码看看是否可以成功运行?
提示:如果不能成功运行,你需要加上空格,让它成功运行。
skill = '跑'if skill == '跑': print('升入大学,成为橄榄球队主力!')else: print('不能升入大学,过着不为人知的生活')
丢失空格会导致代码无法运行。通过刚刚的尝试,你应该体会到这两个空格的重要地位了吧?
其实这个代码行首的留白在编程里有个专业的叫法——缩进。Python 的代码块是通过缩进来定义代码块范围的。
阿甘的球队表现出色,得到了总统先生的接见。不久之后,阿甘大学毕业,此时命运之神再次向他招手,一位军人将征兵告示递到了阿甘手上。
现在请使用条件结构,将代码中的 ??? 替换成正确的代码,在屏幕上打印出阿甘的选择。
提示:阿甘最终选择应征入伍。
choice = '应征入伍'if choice == "应征入伍":print('应征入伍去越南')print('结识了热衷捕虾的巴布和长官泰勒上尉')else:print('不知以后该干什么')
现在你已经可以自己动手实现条件分支了,作为新手的你已经很厉害了!
接下来,老师将教你一个很多编程语言都会用到的知识——注释。
当我们写得代码越来越多,越来越复杂的时候,我们回过头看之前写的代码时,很难立刻就能看明白当初为什么要这么写。而有了注释,相当于给代码做了标注笔记,下次再看的时候便能快速回忆起来。
Python 中的注释很简单,只需要在注释内容前加上 # 即可。比如:
# 屏幕打印阿甘print('阿甘')
注释是给人看的,Python 会自动忽略注释的内容,不去执行。适当的注释可以提高代码可读性,但不要加一些没有必要的注释,不要为了加注释而加注释,比如:
# 给变量 name 赋值为 '阿甘'name ='阿甘'
上面的注释是没有必要的,因为会 Python 的人一眼就能看出 name = '阿甘' 的含义。注释是辅助人们来阅读代码的,如果代码本来可读性就极高,就没有为它添加注释的必要了。
所以大家日后如果要添加注释,可以先反问一下自己,“这里有必要加注释吗?”。我们来体会一下注释的正确打开方式:
# TBD:这是临时上线方案,7.30 号后删除end_date ='2019-07-30'
拓展:TBD 是 to be done 的简称。想了解更多关于代码注释的有趣知识,可以去知乎搜索“你见过哪些奇趣的代码注释”。
这段代码的背景是:我们公司的运营有个紧急需求,希望某促销活动的结束日期,在 7 月 30 号当天临时改为 2019-07-30,我们的后端徐工就临时加了行代码,把 end_date 写死到这天,但为了防止之后忘记把代码改回去,所以加了行注释。
徐工的这行注释一方面防止明天自己忘了改,另一方面是万一明天徐工写了大 bug 跑路了,后面的工程师看到这行注释也会知道这是临时代码,会及时改正并感激徐工不杀之恩。🙏🙏
Python 会自动忽略注释的内容。因此我们可以将暂时用不到但又不想删掉的代码放到注释中,这样 Python 就不会执行它们。将它们放到注释中也便于日后需要用到时快速复原。
举个例子,双十一了要做优惠活动,写了一份优惠的代码,节后要恢复原价。我们可以将原价注释,节后再将注释取消,恢复原价。
# 原价,节后恢复# price = 998# 双十一优惠价price = 499
当然,这个例子很简单,体现不了注释的作用。但如果优惠活动复杂,我们需要注释一大段代码,此时,注释便非常有用。
阿甘所在的队伍在农田巡逻时遭到敌方袭击,中尉叫他快跑,阿甘一溜烟跑出丛林,这时他想起最好的朋友巴布没有出来。在救出好几个战友后,也救出了垂死的巴布。但不幸的是,巴布最终还是死在了越南的一条河边。
下面是阿甘关于巴布的讲述,请你根据故事情节中注释掉错误的巴布结局,运行程序。
print('巴布是我最好的朋友')print('我还知道,好朋友不是那么容易找到的')print('巴布想当一个捕虾船的船长,……')print('但他却死在越南的一条河边')#print('他最终退伍成为了一个船长')
现在,你理解了变量的使用,会使用 Python 中的第一个控制结构——条件,也了解了代码中常见的缩进和注释。同时,通过代码完善阿甘的成长历程。
我们来总结一下这关的知识点:
回望这一关,是不是觉得收获满满呢?
人生本质上就是由一堆堆的选择组成,你无时无刻不在做着选择。而正因为不同的人会有不同的选择,才有了多彩多姿的人生。
阿甘,基于自己的诚实、守信、认真、勇敢、重视感情而做出的一系列选择,造就了令无数人敬佩的他!
在下一关,我同样为你准备了许多有意思的内容。我在下一关等你,明天见!👋