¶ if,elif,else 条件判断语句
¶ 写法
number = 1
if number=='1': # 这里注意英文冒号
print('1') # 这里注意缩进
elif number=='2': # 表达式没有小括号包裹
print('2-1')
print('2-2')
print('2-3')
elif number=='3':
print('3')
else:
print('heihei')
2
3
4
5
6
7
8
9
10
11
学过 js 的你,看到这个肯定小 case 吧!肯定第一时间得到答案,打印出“1”
吧!
实际答案是“heihei”
这就是 python 和 js 的不同之处了。
¶ python 和 js 的不同之处
上上节数据类型的时候我强调了好多遍的。python 是强类型语言,不会做隐式类型转换。
这里number == '1'
在 js 中,肯定会把双等号左右的数据类型统一,然后判断得到 true,if 条件成立。
但是在 python 中,number 是 int 类型的 1,而双等号右边的是 str 类型的 1,他俩不相等,if 条件不成立。
所以,最后走到 else 条件,输出“heihei”。
在这里依据 js 的写法,学一下 python 的写法:
¶ if 在 python 中的写法总结
- if 后边表达式
没有小括号
。 - 表达式后边写
英文冒号
。 - 语句块
没有大括号
包裹,直接冒号后回车。可以巧记成冒号代替大括号。 - if 条件成立后要执行的语句块在冒号下边、且需要“缩进”
elif写法
(对应 js 中的 else if)- python 中判断左右相等用双等号,没有三等号。
¶ 关于缩进
注意:在条件判断代码中的冒号“:”后、下一行内容的前面,要有缩进,空几个格。
对于 Python 而言,冒号和缩进是一种语法。它会帮助 Python 区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个 Tab 键】
在 if 条件语言中,缩进不需要我们手动按空格键。当你用英文输入法打:后按回车,我们的开发工具(用来编写 Python 代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。
被缩进的内容(print()函数)和 if 条件语句组成了一个代码块(一个整体),成为了 if 条件下的内部命令。
如果赋值满足 if 条件,计算机就会准确执行 if 条件内部的命令(即缩进的代码块)。
¶ 无缩进报错
如果在 if 语句下边没有缩进的代码块。就会报错。(详细错误见上一节的缩进错误)
这是因为,当我们去掉缩进时,if 条件和 print 命令成为了两个不同的代码组,属于平行关系。你看:if 条件下面,缺少了可以执行的动作。我们想一下:无论条件成不成立,都不会执行什么操作,这个条件的存在没有任何意义。
¶ 语法
总结出语法如下:
if xxx :
# if语句 条件:
xxxx
# 带缩进的代码块
# if后边跟英文冒号,换行后自动缩进。
2
3
4
5
接下来系统说说这三个语句
¶ 单向判断:if...
含义:如果……就
条件成立,执行冒号下边缩进在 if 语句里的内容。
number=6
# 条件:如果number数量小于6,打印“我是爱你的”
if number >=6 :
print('我是爱你的')
print('我没有错缩进,不是if的语句块,不受条件限制,我都要打印。')
# 我是爱你的
# 我没有错缩进,不是if的语句块,不受条件限制,我都要打印。
2
3
4
5
6
7
8
条件不满足,无法执行 if 条件下的命令,从而自动跳过,执行下一行命令。
number=6
# 条件:如果number数量小于6,打印“我不爱你了”
if number < 6:
print('我不爱你了')
print('我没有错缩进,不是if的语句块,不受条件限制,我都要打印。')
# 我没有错缩进,不是if的语句块,不受条件限制,我都要打印。
2
3
4
5
6
7
所以上述代码没有打印“我不爱你了”,而是直接跳过,打印代码块外边不受if控制的print。
¶ 双向判断:if...else...
双向判断表示的是条件和其他条件的互斥关系
——
条件满足,执行if下边的代码块。
如果不满足条件时,执行else下的代码块
即if和else下的代码块只会执行一个
bool = False # 注意这里,不要写成js中的“false”。
if bool:
print('我爱你')
else:
print('我不爱你了')
print('我没有错缩进,不是if的语句块,不受条件限制,我都要打印。')
# 我不爱你了
# 我没有错缩进,不是if的语句块,不受条件限制,我都要打印。
2
3
4
5
6
7
8
上述条件不满足,执行else内的代码块:“我不爱你了”
¶ 多向判断:if...elif...else...
用于判断三个或三个以上的条件时:
if的条件满足,执行if下边的代码块。
反之,elif的条件满足,执行elif下边的代码块。 elif可以有多个,你乐意写多少都行。
实在都不满足,执行else下的代码块
if、elif、else三者所代表的条件都是互斥的。
score = 74
if score > 99:
print('优秀')
elif score > 85:
print('良好')
elif score > 66:
print('及格')
else:
print('好意思吗?!')
print('我没有错缩进,不是if的语句块,不受条件限制,我都要打印。')
# 及格
# 我没有错缩进,不是if的语句块,不受条件限制,我都要打印。
2
3
4
5
6
7
8
9
10
11
12
74
不满足>99
,所以if下边的代码块跳过不执行
74
不满足>85
,所以第1个elif下边的代码块跳过不执行
74
满足>66
,所以执行第2个elif下边的代码块,打印及格
最后跳过else,执行最后不受语句控制的print。
¶ if 嵌套
if嵌套的应用场景,简单来讲就是:在第一个条件条件满足的情况下,在此基础上增加额外的条件判断。
¶ 嵌套示例
实现如果底下还有如果、条件里还套条件
goal = 94
if goal > 99:
if goal < 105:
print('天才')
else:
print('人间精品')
elif goal > 85:
if goal > 90: # 嵌套if
print('优秀')
else:
print('良好')
print('是个人才!')
elif goal > 66:
print('及格')
else:
print('好意思吗?!')
# 优秀
# 是个人才!
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
94分,满足第一个elif的>85
的条件,执行elif下的代码块
在代码块中,还有一组if...else...
因为满足嵌套if中的else,即85不大于90。所以打印良好
在elif goal > 85:
这组代码块中,还有一个print('是个人才!')
不受内部嵌套if的管制,所以在第一个elif条件成立后,也打印了出来。
¶ 嵌套执行顺序
缩进相同的命令处于同一个等级。
因为计算机就要按顺序一条一条地执行命令
先给goal赋值为94
if、elif、else是只能走一个的互斥关系,所以当条件满足第一个elif的时候,就进入该elif的代码块内。 如下:
elif goal > 85:
if goal > 90: # 嵌套if
print('优秀')
else:
print('良好')
print('是个人才!')
2
3
4
5
6
其他条件的代码块将不会执行。
在上述代码中,又一个嵌套if,则继续判断条件,进入if、else互斥条件中的其中一个代码块内。
根据成立条件,进入if,打印“优秀”
if goal > 90: # 嵌套if
print('优秀')
2
最后,跳出嵌套if,执行嵌套if外边、elif里边的其他剩余代码,打印“是个人才”。
print('是个人才!')
¶ 动手吧
用py代码实现如下逻辑(欢迎评论留言你的写法)
秋天到了,树上果子熟了。猴妈妈让小猴子去山上摘果子。猴妈妈告诉猴子:
如果碰到了苹果树,树上还有5个以上红果子,就摘五个苹果回来。没有的话就摘两个青果子。
碰到了香蕉树,若手里有5个苹果拿不了多少,就摘两根回来。手里有2个苹果,就摘10根香蕉回来。手里没苹果,就尽可能多摘回来点香蕉。
若什么树都没有碰到,就去山上庙里化点斋饭回来。
← 错误类型与可能原因分析 input函数 →