2022年 11月 9日

Python基础语法 – 第2关 条件判断与条件嵌套

【前言】
(在上一关,老师带领你攻克了如何与Python沟通的语言大关——通过三种数据类型(字符串、整数和浮点数)的相互转换,突破语言差异的墙,将代码成功执行。

icon
但是,对于Python来讲,光掌握正确的沟通语言还不够,还需要正确的沟通逻辑,才能让Python准确地执行你的命令。)

————————————-风到这里就是粘 — 粘住过客的思念———————–

【与人工智能机器人沟通的逻辑】
我不知道100年后的未来,人工智能会发展到哪一步,但就现在来讲,一切所谓的人工智能都只是服务于人类的机器。

并且,现在的人工智能,不仅是一个超级听话的仆人,还是一个智商不那么“高”的仆人。

所以,在与它沟通时,为了达成某个目标,你要理清自己讲话的逻辑,下达精准的执行命令:在什么情况下,先做什么,再做什么。不然,你得到的只会是“纳尼?侬缩撒?”的黑人问号脸。

对于Python也是同样。Python之所以能做很多自动化任务,比如自动抓取网页关键词,自动下载小电影等,就是因为它可以执行条件判断。

Python的条件判断,就像霍格沃茨的分院帽,它通过识别你的条件,产生对应的结果,把你分在适合的学院中。

———————————–雨到这里缠成线 —- 缠着我们留恋人世间——————–

【条件判断之】
这个条件判断的代码,要怎么码呢?
【单向判断:if】
例子 :
stonenumber=6
#为宝石数量赋值
if stonenumber>=6:
#条件:如果你拥有的宝石数量大于等于6个
print(‘你拥有了毁灭宇宙的力量’)
#结果:显示‘你拥有了毁灭宇宙的力量’的结果
(如果 XXX 大于 6 就打印这个结果。 不然就无。 很简单。 想到这个 IF 就想到 如何 什么 就 XXX )

在这里,你可能注意到了一个细节:在条件判断代码中的冒号:后、下一行内容的前面,会空几个格,但这是为什么呢?

在这里插入图片描述
首先,在计算机的沟通语言中,空格的学名叫缩进,比如我们写文章都要空两个格,这就叫首行缩进。

对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。

并且,在if条件语言中,缩进不需要我们手动按空格键。当你用英文输入法打:后按回车,我们的开发工具(用来编写Python代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。

此时,被缩进的内容(print()函数)和if条件语句组成了一个代码块(一个整体),成为了if条件下的内部命令。

这意味着:如果赋值满足if条件,计算机就会准确执行if条件内部的命令。

通俗点讲,我们可以把if当作一个黑社会大哥,冒号后的内容都是他的小弟,当老大if提出一个条件时,他组织下的小弟就会自动执行任务。

(个人理解—- 简单讲,形成可单独执行的一块 代码块。)

【去掉缩进也会报错】

去掉缩进会出现IndentationError: expected an indented block(缩进错误:期望一个缩进块)的报错。
为什么呢?
这是因为,当我们去掉缩进时,if条件和print命令成为了两个不同的代码组,属于平行关系。你看,print小弟都自立为王了,他自然就不会执行if老大的命令了。

(个人理解– 去掉缩进就不能形成一个单独执行的代码块。)

————————- 你在身边就是缘 ——- 缘分写在三圣石上面 —————————————-

【Python的自动执行机制】

计算机是一行行往下执行代码的。所以,当第一行赋值情况的前提不满足if的条件时,Python的逻辑就会判断:条件不满足,无法执行if条件下的命令,从而自动跳过,执行下一行命令。

在这里插入图片描述

————————————-爱有万分之一甜 —— 宁愿我就葬在这一点——————————————–

【双向判断:if…else…】
stonenumber=3
#赋值语句:为宝石数量赋值

if stonenumber>=6:
#条件:如果你拥有的宝石数量大于等于6个
print(‘你拥有了毁灭宇宙的力量’)
#结果:显示‘你拥有了毁灭宇宙的力量’的结果
else:
#条件:当赋值不满足if条件时,执行else下的命令
print(‘带着卡魔拉去沃弥尔星寻找灵魂宝石’)
#结果:显示‘去找灵魂宝石’的结果

答对了,我们学习的if条件语句是如果…就…的单向逻辑,如果满足条件,就执行结果。

但很多时候,我们不能把鸡蛋放在一个篮子里,要做好两手准备:如果不满足条件时,我们要怎么办。

Python则很贴心地,让我们借用if…else…语句,让码农们有了另一种选择——【如果…不满足,就…】

在这里插入图片描述
【If-else 需要平级】
【错误案例】
stonenumber=3

if stonenumber>=6:
print(‘你拥有了毁灭宇宙的力量’)
else:
#试试看让else缩进个2空格,看会发生什么。
print(‘带着卡魔拉去沃弥尔星寻找灵魂宝石’)

Python是不是又爆出了让我们头痛的报错【SyntaxError: invalid syntax】(语法错误:无效语法),把我们按在地上摩擦摩擦?

那么,这是为什么呢?为了找到错误,我们得先了解一下正确语法下if和else运行的原理:

首先,当else条件前没缩进时,if和else各自抱团,形成两个不同的代码块。这时,if条件和else条件是平级的。

其次,在平级关系的前提下,他们表示的意思是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。

在这里插入图片描述
【if和else运行的原理】:

首先,当else条件前没缩进时,if和else各自抱团,形成两个不同的代码块。这时,if条件和else条件是平级的。

其次,在平级关系的前提下,他们表示的意思是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。

(如果不平行就会报语法错误 【SyntaxError: invalid syntax】(语法错误:无效语法))

(if和else语句后需跟英文冒号)

—————————————圈圈圆圆圈圈 ——- 天天年年天天 的我——————————————————-

【注释符号 #】
weight=101
#要先为酱酱的体重赋值,酱酱的体重是101斤

if weight>100:
#如果体重超过100斤的条件下,就……(条件后需加冒号)
print(‘不吃了’)
#就打印结果:不吃了!(注意检查是否自动缩进)

else:
#如果体重没有超过100斤的条件,就……(else条件前无缩进,条件后需加冒号)
print(‘放心吃吧’)
#就打印:放心吃吧(注意检查是否自动缩进

———————————深深看你的脸 —– 生气的温柔————————————
【else 不一定要和If 在一起】
(不爱了嘛,不爱就不要在一起了啦~~~)
刚才你自己用if…else…写出了一个基本的条件判断语句。现在,问题又来了:else一定要和if组团,才能运行吗?

并不是,虽然想要让else生效,一定需要一个平级的前提条件,但这个前提条件却不一定是条件判断语句,还可以是后面你会学到的其他命令语句。

可这个和else平级的命令有个限制条件:它不能是一个“一步到胃”的命令——像print()一样直接得出结果的命令,它得是一个需要再处理的命令。

什么叫再处理呢?白话点讲就是:我得先把食物嚼碎了,咽下去才能进到胃里。回归到计算机语言,就是要让计算机先做个判断(如先运行if条件),看是否通过,如果不通过,再运行else。

举一些具体的例子:像我们未来会学到的,让你痛并快乐着的while循环、for循环,这些都是需要再处理的命令,所以他们也可以作为else的平级命令。

(else 这个单词可以理解成否则,就。 if 理解成如果。 那我们可以组合其他的词汇进去用。 for 理解成给的意思。 好了,我们开始造句。 比如, (if)如果我去赌博就剁手!(else)否则不必剁手! , (for)给大爷加100顿的酒上来,(if)如果没有这么多的酒,(else)就散了,爷爷我不付钱就拍屁股走人。)

【双向判断 If -else 或者各种判断的平级条件关系】
例子:
for i in range(10):
if i == 11:
print(‘找到结果’)
break
else:
print(‘未找到结果’)
输出结果: 未找到结果。

你运行出“未找到结果”了吗?在上面这段代码中,由于if缩进,成为了for循环的“小弟”。所以else和for的内部条件if无关,只和它的平级条件for循环有关。
在这里插入图片描述
这就意味着:根据计算机一行行往下执行命令的语法特点,计算机会先执行for循环下的代码块,完成后再执行else下的命令。

关于if…else…的相关知识点到这里就讲完了。

————————————–埋怨的温柔 的脸 —– 不懂爱恨情愁煎熬的我们——————————-

【第三种可能性的存在 —- 多向判断:if…elif…else…】
在判断3个或3个以上的条件时,我们就需要借助Python中的多向判断命令:if…elif…else…。

这三者共同构成了多向判断的命令逻辑关系:如果if的条件不满足,就按顺序看是否满足elif的条件,如果不满足elif的条件,就执行else的命令。

并且,当判断的条件超过3个时,中间的多个条件都可以使用elif,如下图。

在这里插入图片描述
(其次,elif的运行本质上和else一样,都需要一个和elif平级的前提,但是这个前提只能是if。

最后,elif已经带有其他条件的意思,所以elif后也可以不接else。)

(ifelifelse条件逐个扫描,看看自己满足哪一个,就执行哪个条件底下的命令。)

————————都以为相爱就像风云的善变 — 相信爱一天 抵过永远———————————–

【if嵌套】
if嵌套的应用场景,简单来讲就是:在基础条件满足的情况下,再在基础条件底下增加额外的条件判断。
(假如 你很爱我 我确认了。 那么我再假如 也是我要问你的。 你有多爱我? (嵌套语句可以将某个东西说的更精确,判断的更精确。))
比如说精确判断分数,输出描述内容。

例子:

historyscore=26

if historyscore>=60:
print(‘你已经及格’)
if historyscore>=80:
print(‘你很优秀’)
else:
print(‘你只是一般般’)
else:
print(‘不及格’)
if historyscore<30:
print(‘学渣’)
else:
print(‘还能抢救一下’)
print(‘程序结束’)

首先,我们先从整体总览一下,这段彼得·帕克成绩评价规则的代码总共分为四部分(分别是赋值、if、else、print()),两个大代码组。
在这里插入图片描述
根据缩进看,这四个部分都是平级关系。并且,在if和else的代码组里面,又包含了条件判断命令if…else…。这正是嵌套在实际代码中的使用方式。

在这里插入图片描述

(个人理解 第一个代码块开头和其他以下代码块开头平级。 内部嵌套代码块开头对应平级以下代码块内部嵌套平行。内部嵌套代码块按照规则缩进。)