我们每天,都要根据不同的情况作出判断和选择。
例如:今天带不带雨伞。
如果天气预报说,今天有雨,那么带上雨伞。
例如:今天的安排。
如果今天是周末,那么出去玩,否则去学校上课。
在编写程序的过程中,我们也需要用到条件判断,例如问“是”与“否”的问题,然后根据不同的答案去做不同的事情。
IF语句简介
在Python中,我们通过IF语句来进行条件判断,控制程序的执行。
IF语句的基本形式是:
运行原理就是:给出条件,决定下一步怎么做?如果条件为真,就执行语句的内容,为假就退出。
学习之前,我们首先要理解Python中的真假:
1. 任何非零和非空对象都为真 解释为True
2. 数字0、空对象和特殊对象None均为假 解释为False
例如:
数字1是true;
数字99是true;
数字 -1是true;
“hello”是true;
一切非0非空都是true
3. 比较和相等测试会递归地应用到数据结构中
4. 返回值为True或False
比较运算符,也叫关系运算符,用于对常量、变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回 True;反之,则返回 False。
Python 支持的比较运算符如下图所示
例如:
5 > 3返回True;
5 > 9返回False;
5 == 9返回False
8 != 6 返回True
3 ** 4 >= 90 返回False
5. 布尔and和or运算符会返回真或假的操作对象。
Python中有三种布尔表达式运算符:
X and Y:如果X和Y都为真,就是真。也就是两个条件都要满足。
X or Y:如果X或Y有一个为真,就是真。也就是两个条件满足其中一个就好。
not X:如果X为假,就是真,如果X为真,就是假。
Python中IF语句包含4个部分:
if关键字
条件表达式
冒号
缩进的代码块(执行语句)
我们来试几个例子。单击IDLE菜单栏的File(文件)—— New File(新建文件),在新窗口中输入如下代码:
age = 18
if age >= 18:
print('你是一个成年人了')
这里一定要注意,print语句前面,会有非常明显的4个空格,千万不要企图删除他们。在Python程序中,这个称为缩进。
按下F5,保存你写的py文件,并且调试运行它。(你可以存在任何你喜欢的位置,名字可以写成3-1,表示第三次课的第一个程序)
回到shell交互窗口,查看运行结果,是不是如下图所示:
代码分析如下:
age = 18 | 创建变量age,并赋值数字18 |
if age >= 18: print('你是一个成年人了') | 如果age的值大于等于18,则在屏幕打印输出“你是一个成年人了”。这里age等于18,条件为真,所以执行print语句。 |
我们把刚刚的代码修改一下,把age的值改成16。
age = 16
if age >= 18:
print('你是一个成年人了')
按下f5键,保存并运行这段代码,你会发现,交互窗口什么也没输出。那是因为,age<18,条件不能满足,为假,所以不执行print语句。
继续修改程序,把age改回18,并且继续添加一段print语句:
age = 18
if age >= 18:
print('你是一个成年人了')
print('你要对自己负责')
按下f5键,保存并运行这段代码,你看到了什么?
Python用缩进来标识同一层次的代码块,所以上面2个print语句是同一个代码块,当if条件为真,2个print语句都会被执行。
再来修改一下程序代码,这次,我们把age改到16岁,然后删除第二个print语句前面的空格。
age = 16
if age >= 18:
print('你是一个成年人了')
print('你要对自己负责')
按下f5键,保存并运行这段代码,猜猜结果会是什么???
为什么只显示了第二条print语句的内容呢?
那是因为取消了缩进之后,第二个print语句属于主程序了,不再经过if的判断,直接执行输出。
继续修改程序,这次将年级改回18岁,将第二个print前面的空格还原,并且多加2个空格:
age = 18
if age >= 18:
print('你是一个成年人了')
print('你要对自己负责')
按下f5键,保存并运行这段代码,你会发现,系统提示错误了
这个是“意外缩进”的错误提示,红色色块会告诉你错误的位置,Python要求你在同一个代码块中,对所有行都使用相同数量的空格来缩进,为了能正常的运行Python程序,我们必须严格按照Python的规定来编码。
一般使用4个空格(或1个tab制表符)做为缩进,它也是约定俗成的书写习惯。
if不做的事情,else来做
在刚刚的案例中,我们都只是对条件语句判断为True(真)的时候,做了相应的事情,那么,如果为假(False),我们啥也没做。
如果我需要条件判断为False的时候,去做另外一件事情呢?
例如:
如果今天天晴,我们就去公园玩,否则,我们就去博物馆。
用Python来标识这段逻辑如下:
if 今天天晴 :
去公园
else :
去博物馆
else语句和if语句搭配一起使用的,当if条件判断为False的时候,程序执行else后面的代码块。
我们还是通过一个例子来理解,添加一个else语句,修改刚刚的程序代码如下,注意代码的缩进,else和if不属于同一个代码块,前面的缩进需要删除;else后也需要冒号“:”
age = 16
if age >= 18:
print('你是一个成年人了')
else:
print('你还是个孩子')
按下F5,保存并运行,看看你的结果是不是跟下图一样。
由于age等于16,不满足if的条件判断,所以执行else后面的print语句,输出“你还是个孩子”
else和if的好兄弟 —— elif
有些时候,我们面临的选择不止1个2个,有可能是很多个。例如对于期末成绩的评定,我们可以有如下4个档次:
如果 成绩小于60分
那么评定为“不及格”
如果 成绩大于等于60分且小于75分
那么评定为“合格”
如果 成绩大于等于75分且小于90分
那么评定为“良好”
如果 成绩大于等于90分
那么评定为“优秀”
这时候,我们就需要else和if的好兄弟,elif出马解决这个多选一的问题了。
if elif的嵌套结构如下图所示
Python中使用以下形式:
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
。
。
。
elif 判断条件n:
执行语句n……
else:
执行语句……
在我们这个案例中,代码如下:
score = 85
if score < 60:
print('不合格')
elif score < 75:
print('合格')
elif score < 90:
print('良好')
else:
print('优秀')
按下F5,保存并运行,看看你的结果是不是跟下图一样。
这里有同学提出一个问题,从第一个elif开始,为什么只写了一半的条件规则,例如,合格的条件明明是要求大于等于60,且小于75,我们在程序当中,忽略了>=60。
请对照下图来理解:
程序一开始,我们创建了一个score变量,赋值85。第一次if判断score是否小于60,结果为假,于是去到第二次判断。
这里,能够看到第二轮条件判断的数据都应该是>=60的,所以我们不需要强调合格的标准是score>=60且score<75,条件可以省略前半部分,保留score<75就好了。
(如果你还不能理解,你就想象成一个大教室有很多同学,你说,4月以前出生的同学,请去1号考场,这群同学就离开了;然后你想安排4月到6月出生的同学去2号考场,你只需要说,请7月以前出生的同学,去2号考场,因为教室里已经没有4月以前出生的同学了。)
第二次判断score是否小于75,结果又为假,于是到了第三层判断。
这时候,能看到第三层条件判断的数据必然是>=75的,所以我们只需考虑score是否小于90,结果为真,执行输出,跳出if程序块,回到主程序。
延伸一下,我们可以把score的分数换几个,然后你看看,系统输出的结果,是不是和你计算的一样。
组合条件
在现实生活中,我们经常遇到这样的情况,爸爸妈妈跟你说,只要语文和数学有一门是满分,就奖励你一个玩具;如果两门都是满分,就带你出去玩。要是没考好,就啥也没做,在家做作业。
那么,这样多个条件的情况,怎么用Python代码来实现呢?
规则如下:
两个条件同时满足找and
两个条件任选一个找or
新建py文件,这里,我们用shuxue来表示数学成绩,yuwen来表示语文成绩,假设小明的数学考了100分,语文95分,我们输入以下代码:
shuxue = 100
yuwen = 95
if shuxue == 100 and yuwen == 100:
print('出去旅游')
elif shuxue == 100 or yuwen == 100:
print('买个玩具')
else:
print('家里蹲,做作业')
按下f5键,保存并运行这段代码,看看是不是能得到以下的结果:
shuxue == 100 and yuwen == 100 表示数学和语文都是100,结果才能返回True.
shuxue == 100 or yuwen == 100 表示数学和语文只要有一个100,结果就能返回True。
我们同样可以把分数换几个数字,看看,系统输出的结果,是不是和你预想的一样。
今日小结:
在这次推送课程里,你学到了如果用if语句来创建条件判断执行的语句块。你还学会了如何用else和elif来扩展if语句;你掌握了条件运算符的用法,还学会了如何用关键字and和or将条件组合起来。
今日的思考题
你认为下面的代码会输出什么?
关注微信公众号,输入“条件判断”,获取习题答案和讲解