python(第2关:灭霸的选择(沟通逻辑))

一、条件判断(在什么条件下,该去做什么。) python(第2关:灭霸的选择(沟通逻辑))
文章图片
python能够完成自动化,是因为可以执行条件判断

python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App

python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App















一、单向判断,if














那么,这段代码是如何实现的呢?
首先,第一行代码,用赋值运算符=对当前情况进行赋值:将你拥有的宝石个数6赋值给变量——宝石数stonenumber。
第二步,确定if条件:如果变量stonenumber的值>=个数6时,就执行冒号后,下一行的命令。
第三步,用print()命令打印出结果:你拥有了毁灭宇宙的力量。
所以,if语句的单向判断逻辑,我们可以这样归纳:

python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
在这里,你可能注意到了一个细节:在条件判断代码中的冒号:后、下一行内容的前面,会空几个格,但这是为什么呢?
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
首先,在计算机的沟通语言中,空格的学名叫缩进,比如我们写文章都要空两个格,这就叫首行缩进。
对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个Tab键】
并且,在if条件语言中,缩进不需要我们手动按空格键。当你用英文输入法打:后按回车,我们的开发工具(用来编写Python代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。
此时,被缩进的内容(print()函数)和if条件语句组成了一个代码块(一个整体),成为了if条件下的内部命令。
小结一下单向判断:if的代码逻辑及语法格式:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
请修改下方代码框中无限宝石的代码:在if条件不变的情况下,修改第一行的赋值语句,把【stonenumber=6】改为【stonenumber=2】,并点击运行,看看会出现什么结果。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App

python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
你可能会在心里犯嘀咕:为什么连个报错都没有呢?那么,我来解释一下这是怎么回事。
首先,第一行的赋值语句【stonenumber=2】是后面if条件判断语句的前提情况,然而并不满足『stonenumber>=6』这个条件,所以不会执行条件下的『print』操作。
老师讲过,计算机是一行行往下执行代码的。所以,当第一行赋值情况的前提不满足if的条件时,Python的逻辑就会判断:条件不满足,无法执行if条件下的命令,从而自动跳过,执行下一行命令。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
但是,在上方代码中,除了if之外,我们并没有设置其他的命令去让Python执行。因此,Python自然就无法输出结果。
也就是说,由于宝石数量只有2,没有满足6颗宝石的if条件,if条件下的打印命令就无法生效,自然没办法获得摧毁宇宙的力量。
而作为最强反派,灭霸当然不会就此善罢甘休。他要继续寻找宝石,直到集齐6颗,达到他的目的。
那么,这个如果6颗宝石的条件没满足,就做其他事情——寻找宝石的判断,在Python中要如何实现呢?
那么,这个如果6颗宝石的条件没满足,就做其他事情——寻找宝石的判断,在Python中要如何实现呢?


二、双向判断:if…else…
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
在抢夺了收藏家手里的宝石后,拥有三颗宝石的灭霸逼迫自己的养女卡魔拉,说出了第四颗灵魂宝石的下落——沃弥尔星。
在Python宇宙,我们可以利用if的双向判断形式:if…else…去实现这个行动:当宝石数量还没达到6颗的时候,需要带着卡魔拉去沃弥尔星寻找灵魂宝石。
下面,请你直接运行下面的代码,看程序是如何识别的:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
很多时候,我们不能把鸡蛋放在一个篮子里,要做好两手准备:如果不满足条件时,我们要怎么办。
Python则很贴心地,让我们借用if…else…语句,让码农们有了另一种选择——【如果…不满足,就…】
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
在if...else条件语句中,if和else各自抱团,形成两个不同的代码块。表示的是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
如果用我们上面宝石的例子讲解的话,if定义的就是宝石数>=6,而else定义的则是宝石数<6。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
而由于赋值【stonenumber=3】,并不满足【if stonenumber>=6:】这个条件,所以不能执行【print('你拥有了毁灭宇宙的力量')】的命令。
只能走第二条else:的路——执行print('带着卡魔拉去沃弥尔星寻找宝石')的结果。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
下面,我们来做个题巩固一下if...else...的知识点:前天晚上,酱酱无比纠结自己要不要吃夜宵,所以她打算上秤称一下,如果体重超过100斤,就不吃了,没有的话,就放心吃。结果……刚好101斤(泪目)……
请在下面代码框里用if...else...把酱酱的夜宵判断语句写出来。【要点提示:1. 为酱酱的体重weight赋值;2. 开始判断,如果if体重超过100斤,打印结果不吃了,否则else,打印结果放心吃吧;3. if和else语句后需跟英文冒号:】
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App

python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
关于if...else...的相关知识点到这里就讲完了,我们来总结一下if…else…语句的知识点。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
代码讲解告一段落,我们再回到灭霸的故事中,在连续的战斗之后,灭霸无限宝石的收集之旅,只差最后一颗——心灵宝石。
不巧的是,这颗宝石镶在了超级英雄幻视的头上。幻视深知想要阻止灭霸,只能请求红女巫,毁掉自己头上的宝石。
所以,摆在红女巫面前的问题条件是:灭霸已经拥有5颗宝石,如果宝石数大于等于6,世界会被灭霸毁灭。
但是,如果想让宝石数停留在5个及以下,她必须要亲手毁掉幻视头上的宝石,同时,还要从灭霸手中至少夺回一颗宝石,才会有胜利的希望。
或者,还有第三种胜利的可能——如果想让灭霸手中一个宝石都没有,让一切都未曾发生,那么我们需要穿越时空,回到过去。
那么,这三个如果在Python中要如何实现呢?
三、多向判断:if…elif…else…
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
国际惯例,在思考如何用代码实现某个目标时,首先,我们需要先来梳理一下逻辑。
通过上面的故事情节我们知道,在代码中,我们需要添加三个如果:如果宝石数>=6,如果0<宝石数<=5,如果宝石数=0。并产生3个对应的执行结果。
那么,在判断3个或3个以上的条件时,我们就需要借助Python中的多向判断命令:if…elif…else…。
这三者共同构成了多向判断的命令逻辑关系:如果if的条件不满足,就按顺序看是否满足elif的条件,如果不满足elif的条件,就执行else的命令。
并且,当判断的条件超过3个时,中间的多个条件都可以使用elif。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
那么,这个代码要怎么写呢?我们还是在代码中来感受一下elif的逻辑,直接点击运行就好:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
通过上面if和else的积累,多向判断elif的逻辑是不是很好理解?
首先,第一行的赋值,会按照从上到下的顺序挨个试一遍,看自己满足哪个条件,满足了就不往下走,不满足就继续试,试到出结果为止。
其次,elif的运行本质上和else一样,已经带有其他条件的意思,所以elif后可以不接else。
比如上面的代码,stonenumber=5会对下面的if elif else条件逐个扫描,看看自己满足哪一个,就执行哪个条件底下的命令。
很显然,第二个条件elif 0
下面,请你练习一下,试着不要看刚才的代码,参考下面的提示,自己来重写一遍刚才我们学过的那段代码,通过修改宝石数的赋值语句,让输出结果变为需要惊奇队长逆转未来。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
提示:(1)为宝石数量赋值(数量为0)(2)条件1:如果宝石数量>=6,显示你拥有了毁灭宇宙的力量(3)条件2:如果0<宝石数量<=5,显示红女巫需要亲手毁掉幻视额头上的心灵宝石(4)条件3:如果是其它情况,显示需要惊奇队长逆转未来
步骤有了,下面请你来“逆转未来”:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
下面,我们来总结一下elif的知识点
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App 二、if嵌套
但是,不管复仇者联盟怎么竭尽全力,最终,灭霸还是打出了响指。所有人在一瞬间面临着分离与死亡。
即使套着超级英雄的外衣,蜘蛛侠彼得·帕克也仅仅是个18岁的高中生。他曾只顾忙着在街头巷尾当平民英雄,结果在期末历史考试里只考了26分,荣获“学渣”提名。
但这个“学渣”评价并不是随便来的,而是通过规则一步步过滤出来的:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
像这种如果底下还有如果、条件里还套条件的情况,我们如何用Python把上面的规则写出来,并得出评价呢?
答案就是——嵌套条件。
if嵌套的应用场景,简单来讲就是:在基础条件满足的情况下,再在基础条件底下增加额外的条件判断。
就像上面的基础条件是60分及格,想要判断优秀和一般还要增加额外条件——是否大于等于80。
因此,彼得·帕克的成绩评价规则,用if嵌套可以像下方代码这样:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
居然出现了三个扎心的结果……那么,在Python中,我们如何同时得出不及格、学渣、程序结束这三个结果的呢?
首先,我们先从整体总览一下,这段彼得·帕克成绩评价规则的代码,总共分为四部分【赋值、if、else、print()】,两个大代码组。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
并且,在代码组1的if条件和代码组2的else的条件下,又包含了条件判断命令if...else...。
那么,这种嵌套命令我们要如何理解呢?
首先,我们知道,缩进相同的命令处于同一个等级,第一步,计算机就要按顺序一条一条地执行命令。
那么,计算机执行的顺序就是:(1)先给historyscore赋值;
(2)因为if和else是只能留一个的互斥关系,if和else下的代码块只会执行一个,所以计算机要判断赋值的内容满足【historyscore>=60】还是【historyscore<60】的条件——如果满足if的条件,就执行if缩进下的内容,如果不满足就执行else缩进下的内容;
(3)执行print('程序结束')。
下面,吴枫老师又要开启提问模式了,如果回答正确请找酱酱学姐给你放烟花啊:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
答案是C,else条件代表的范围是historyscore<60,包含historyscore=26。会执行else代码块:else:,而不会执行if代码块:**if historyscore>=60。
经过判断,我们知道了,蜘蛛侠26分的历史成绩要找else代码块:else:。然而,问题又来了,else代码块后面不仅跟着三个print(),还有if,所以我到底要输出哪个?
所以,计算机语法的执行逻辑永远都不会变,else下的代码也要一行一行往下执行,并根据条件判断运行对应层级,输出对应结果。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
所以,我们的运行顺序是,先输出的结果不及格,然后再判断历史成绩26分的赋值符合历史成绩<60分且<30分还是历史成绩<60分且>=30分的条件。
下面,我们再通过一张导图理一下if嵌套的逻辑,老师建议你把这张图收藏起来,接下来写嵌套代码的时候可以翻看:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
要注意的是,elif也是可以放进嵌套里的。
是不是很有趣?那么下面,吴枫老师来教你一个写嵌套条件代码的小技巧。
三、如何写嵌套代码
if嵌套由于涉及多个条件判断,并且是条件套条件的判断,所以为了理清逻辑,我们可采用扒洋葱大法写if嵌套。
用“彼得·帕克的历史成绩”举例,第一步就要搞定最外层那张皮,将最基础的命令和条件写出来。
那么,我们的思考逻辑应该是这样(1)把彼得·帕克26分的历史成绩赋给变量historyscore;(2)用if…else写最基础判断条件如果historyscore>=60时,打印你已经及格,否则,打印不及格;(3)用print()输出程序结束。
来来来,跟老师动起来,请根据上面提示写一遍代码,并点击运行。看在成绩为26分的赋值情况下,只套了一层“条件判断”皮的代码,会出现怎样的结果:



python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
运行通过了吗?正确的话,你应该会看到终端显示不及格、程序结束。老师的答案是这样子的:
第二步,在“第一层皮”里装东西。也就是在条件【historyscore>=60】下,增加额外条件。
其中,额外条件1:当历史成绩大于80分,显示结果你很优秀;额外条件2:当历史成绩在60到80分之间,显示结果:你只是一般般。
下面,请你先瞄一眼正确的代码,并注意我是怎样安排额外条件的代码的。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App

python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App

python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App

最后一步,你要为另一个大条件else增加额外条件了!
请你以下方代码框中的代码为基础,在else底下增加两个额外条件。
其中,额外条件1:当历史成绩小于60,同时还小于30时,输出结果学渣;额外条件2:当历史成绩小于60,但大于等于30时,输出结果还能抢救一下。
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App 【python(第2关:灭霸的选择(沟通逻辑))】

python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App
最后的最后,我们来总结一下整节课的知识点:
python(第2关:灭霸的选择(沟通逻辑))
文章图片
图片发自App

    推荐阅读