声明:大家在学习过程中如果有遇到不懂的知识点,可以私聊,柯看到必回。也可以找我拿练习巩固!
上篇内容是对三种数据类型和数据类型操作的讲解。攻克了如何与Python沟通的语言大关——通过三种数据类型(字符串、整数和浮点数)的相互转换,突破语言差异的墙。
但是光掌握正确的沟通语言还不够,还需要正确的沟通逻辑,才能让Python准确地执行你的命令。
什么逻辑?就是明确地让计算机知道:在什么条件下,该去做什么。上图:
Python之所以能做很多自动化任务,比如自动抓取网页关键词,自动下载小电影等,就是因为它可以执行条件判断。它通过识别你的条件,产生对应的结果。
有几种判断形式呢?
三种:
这是if语句的结构,下面我上个代码,大家可以在编译器种实现一下。
i = 5 if i < 10: print("你今天真好看!")
这段代码的意思呢就是我把一个变量i赋予一个初始的值5,然后建成一个条件,如果i<10,就输出“你今天真好看”。
那如果是条件不变呢,我把i赋值成11
i = 11 if i < 10: print("你今天真好看!")
就啥都输出不了。
也就是“你今天真好看”要显示在终端上,前提条件是i<10必须满足。
讲完要点,来扯一下细节。
①在条件判断代码中的冒号(:)后、下一行内容的前面,会空几个格,但这是为什么呢?
首先,在计算机的沟通语言中,空格的学名叫缩进,比如我们写文章都要空两个格,这就叫首行缩进。
对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。
并且,在if条件语言中,缩进不需要我们手动按空格键。当你用英文输入法打:后按回车,我们的开发工具(用来编写Python代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。
此时,被缩进的内容(print()函数)和if条件语句组成了一个代码块(一个整体),成为了if条件下的内部命令。
这意味着:如果赋值满足if条件,计算机就会准确执行if条件内部的命令。
通俗点讲,我们可以把if当作一个黑社会大哥,冒号后的内容都是他的小弟,当老大if提出一个条件时,他组织下的小弟就会自动执行任务。
你们可以尝试一下把刚才的代码中print()函数前的缩进去掉
是不是会出现IndentationError: expected an indented block(缩进错误:期望一个缩进块)的报错?
这是因为,当我们去掉缩进时,if条件和print命令成为了两个不同的代码组,属于平行关系。你看,print小弟都自立为王了,他自然就不会执行if老大的命令了。
总结一下刚才代码的逻辑:
解释一下哈:
我们学习的if条件语句是如果…就…的单向逻辑,如果满足条件,就执行结果。
但很多时候,我们不能把鸡蛋放在一个篮子里,要做好两手准备:如果不满足条件时,我们要怎么办。
Python则很贴心地,让我们借用if…else…语句,让码农们有了另一种选择——【如果…不满足,就…】
注意:else虽然属于这个if,但是是不需要缩进的,因为else是if的好兄弟,if不要的东西,else都会要的。他们是并列的同级关系。
在平级关系的前提下,他们表示的意思是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。
学过集合的朋友们我还可以用集合来讲一下。就是有个条件集U,if后面接的条件是集合里面的子集A,else表示的就是集合A的补集。
跑一下代码吧
i = 11 if i < 10: print("你今天真好看!") else: print("你今天真开心!")
你看,他不满足i<10的条件,所以执行了else中的语句,在终端打印出了“你今天真开心!”
再看下面这种情况:
i = 11 if i < 10: print("你今天真好看!") if i > 5: print("你明天更好看!") else: print("你今天真开心!")
此时又什么都运行不出来了,为什么呢?
因为这个else在if i<10 的里面,前面有缩进代表它和if i<10的这个if不是同级,不能运行出除了i<10以外的所有情况。
那我们要运行出你今天真开心,要给i的赋值范围在哪里呢?
对,没错,是在i<=5的时候。
首先要能够执行第一层if就满足i<10这个条件,然后i<10且i>5的条件下,会运行第二个if中的内容,所以要运行出“你今天真开心”,就必须满足i<10且不满足i>5。
i = 4 if i < 10: print("你今天真好看!") if i > 5: print("你明天更好看!") else: print("你今天真开心!")
对吧!哦,解释一下,“你今天真好看!”是满足i<10就会打印出来的。
接下来做一个总结:
else对应的是最近的一个同级的if
我们归纳一下if...else正确运行的语句逻辑:(1)if和else两个条件判断是平级关系;(2)当if条件不被满足时,才会执行else下的命令。
看到没,想让else正确运行有两个关键点——平级和if前提条件:当else有一个和它平级的if前提条件,且这个前提条件无法执行时,才会轮到else发挥作用。
提前预告:
现在,问题又来了:else一定要和if组团,才能运行吗?
并不是,虽然想要让else生效,一定需要一个平级的前提条件,但这个前提条件却不一定是条件判断语句,还可以是后面你会学到的其他命令语句。
可这个和else平级的命令有个限制条件:它不能是一个“一步到胃”的命令——像print()一样直接得出结果的命令,它得是一个需要再处理的命令。
什么叫再处理呢?白话点讲就是:我得先把食物嚼碎了,咽下去才能进到胃里。回归到计算机语言,就是要让计算机先做个判断(如先运行if条件),看是否通过,如果不通过,再运行else。
举一些具体的例子:像我们未来会学到的,让你痛并快乐着的while循环、for循环,这些都是需要再处理的命令,所以他们也可以作为else的平级命令。
话不多说,先上图:
这又是什么鬼?
通俗来说呢
在判断3个或3个以上的条件时,我们需要借助Python中的多向判断命令:if…elif…else…。
这三者共同构成了多向判断的命令逻辑关系:如果if的条件不满足,就按顺序看是否满足elif的条件,如果不满足elif的条件,就执行else的命令。
来跑一下代码吧
i = 4 if 5 < i < 10: print("你今天真好看!") elif 5 > i > 3: print("你明天更好看!") else: print("你今天真开心!")
首先,第一行的赋值,也就是整个条件判断的大前提会按照从上到下的顺序挨个试一遍,看满足哪个条件,满足了就不往下走,不满足就继续试,试到出结果为止。
其次,elif的运行本质上和else一样,都需要一个和elif平级的前提,但是这个前提只能是if。
最后,elif已经带有其他条件的意思,所以elif后也可以不接else。
上面的代码,大前提i = 4会对if 和所有的elif进行扫描,先扫描有没有在5~10里面,如果没有,就继续判断elif,看看有没有在3~5里面,欸发现有了,就输出了elif对应的内容。
用集合来解释一下:if是条件集U中的子集A,elif是子集B(可能还有很多个elif是子集C,D,E等等),那么我们最后的else就是A∪B∪C...并集的补集。
好啦,今天的if语句就讲到这里啦,柯要去给学生上课了,有任何问题,或者文章中有错误的地方,及时提醒柯!!欢迎并感恩各位大佬的提点!