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')
1
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后边跟英文冒号,换行后自动缩进。
1
2
3
4
5

接下来系统说说这三个语句

单向判断:if...

含义:如果……就

条件成立,执行冒号下边缩进在 if 语句里的内容。

number=6
# 条件:如果number数量小于6,打印“我是爱你的”
if number >=6 :
    print('我是爱你的')

print('我没有错缩进,不是if的语句块,不受条件限制,我都要打印。')
# 我是爱你的
# 我没有错缩进,不是if的语句块,不受条件限制,我都要打印。
1
2
3
4
5
6
7
8

条件不满足,无法执行 if 条件下的命令,从而自动跳过,执行下一行命令。

number=6
# 条件:如果number数量小于6,打印“我不爱你了”
if number < 6:
    print('我不爱你了')

print('我没有错缩进,不是if的语句块,不受条件限制,我都要打印。')
# 我没有错缩进,不是if的语句块,不受条件限制,我都要打印。
1
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的语句块,不受条件限制,我都要打印。
1
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的语句块,不受条件限制,我都要打印。
1
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('好意思吗?!')
# 优秀
# 是个人才!
1
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('是个人才!')
1
2
3
4
5
6

其他条件的代码块将不会执行。

在上述代码中,又一个嵌套if,则继续判断条件,进入if、else互斥条件中的其中一个代码块内。

根据成立条件,进入if,打印“优秀”

if goal > 90: # 嵌套if
    print('优秀')
1
2

最后,跳出嵌套if,执行嵌套if外边、elif里边的其他剩余代码,打印“是个人才”。

print('是个人才!')
1

动手吧

用py代码实现如下逻辑(欢迎评论留言你的写法)

秋天到了,树上果子熟了。猴妈妈让小猴子去山上摘果子。猴妈妈告诉猴子:

如果碰到了苹果树,树上还有5个以上红果子,就摘五个苹果回来。没有的话就摘两个青果子。

碰到了香蕉树,若手里有5个苹果拿不了多少,就摘两根回来。手里有2个苹果,就摘10根香蕉回来。手里没苹果,就尽可能多摘回来点香蕉。

若什么树都没有碰到,就去山上庙里化点斋饭回来。