Skip to content

Python if 条件判断 ​

我们要做一组“根据情况给出下一步提示”的小程序:红灯时停车、根据成绩输出等级、登录后检查作业。它们都在解决同一个问题:条件不同,程序应该走哪条路线?

先从“条件成立时才提示”开始,再处理“不成立时也要有结果”“多个结果只能选一个”“只有前一步成功才继续判断”,最后把简单的二选一赋值缩短成条件表达式。

这种“条件不同,执行路线不同”的结构叫作分支。Python 使用 if、elif 和 else 编写分支。

单分支判断:if ​

先解决第一个问题:成绩达到 60 分时显示“成绩及格”,成绩不够时暂时不输出提示。

if 单分支结构

只需要在条件成立时执行一段代码,可以单独使用 if:

python
score = 75

if score >= 60:
    print("成绩及格")

score >= 60 的结果是布尔值:

  • 条件为 True,执行缩进的代码
  • 条件为 False,跳过缩进的代码

基本语法如下:

python
if condition:
    ...  # 条件成立时执行

写 if 时先注意三点:

  1. if 后面需要一个能够判断真假的条件
  2. 条件后面必须写英文冒号 :
  3. 属于 if 的代码需要统一缩进 4 个空格

缩进决定代码属于哪个分支。缩进结束后,后面的代码会恢复正常顺序执行。

双分支判断:if...else ​

但交通信号灯不能只处理红灯;如果不是红灯,程序也必须告诉我们下一步怎么做。

if 和 else 构成完整代码块

如果条件成立和不成立时都要执行代码,可以增加 else:

python
light = "红灯"

if light == "红灯":
    print("立刻停车")
else:
    print("继续前行")

print("完成本次判断")

运行结果:

text
立刻停车
完成本次判断

if 和 else 只会执行其中一个分支。最后一条 print() 没有缩进,不属于任何分支,所以判断结束后一定会执行。

程序的执行路线如下:

if-else 执行流程

多分支判断:if...elif...else ​

如果结果不止两个怎么办?成绩等级和信号灯都有多个互斥结果,程序需要从上到下选择第一个匹配的分支。

需要在多个互斥条件中选择一个结果时,可以使用 elif。elif 可以理解为“否则,如果……”。

if、elif 和 else 多分支结构

基本语法如下:

python
if condition1:
    ...  # 条件 1 成立时执行
elif condition2:
    ...  # 条件 2 成立时执行
elif condition3:
    ...  # 条件 3 成立时执行
else:
    ...  # 前面的条件都不成立时执行

Python 会从上到下检查条件。一旦找到第一个为 True 的条件,就执行对应分支,并跳过后面的其他分支。

案例:交通信号灯 ​

先把“红灯、绿灯和其他状态分别怎么处理”这个任务写出来:

python
light = "绿灯"

if light == "红灯":
    print("立刻停车")
elif light == "绿灯":
    print("继续前行")
else:
    print("观察信号灯后再行动")

运行结果:

text
继续前行

这里的三个结果互相排斥,每次只会选择一个分支。

多条件判断执行流程

案例:成绩等级 ​

接下来把同样的结构用于更常见的成绩反馈问题:

假设成绩范围是 0~100,根据分数输出等级:

分数等级
90~100优秀
80~89良好
70~79中等
60~69及格
0~59暂未及格

第一种写法把每个分数区间完整写出来:

python
score = int(input("请输入成绩:"))

if score >= 90:
    print("优秀")
elif score >= 80 and score < 90:
    print("良好")
elif score >= 70 and score < 80:
    print("中等")
elif score >= 60 and score < 70:
    print("及格")
else:
    print("暂未及格")

这段代码可以继续简化。因为 Python 只会进入第一个满足条件的分支,所以执行到第二个条件时,已经能够确定成绩小于 90:

python
score = int(input("请输入成绩:"))

if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 70:
    print("中等")
elif score >= 60:
    print("及格")
else:
    print("暂未及格")

条件必须从高分到低分排列。如果先写 score >= 60,那么 90 分也会在第一个分支中匹配,后面的等级就没有机会执行。

成绩分段判断流程

如果全部写成独立的 if 会怎样

如果把“只能选一个等级”误写成多个独立 if,会出现什么结果?

运行下面的代码:

python
score = 95

if score >= 90:
    print("优秀")
if score >= 80:
    print("良好")
if score >= 70:
    print("中等")
if score >= 60:
    print("及格")
else:
    print("暂未及格")

运行结果:

text
优秀
良好
中等
及格

这些 if 彼此独立,每个条件都会单独判断。最后的 else 只和它前面的 if score >= 60 配对,不会和上面所有 if 共同组成多分支。

多个独立 if 并不是错误。当多个条件可以同时成立,并且每个成立的条件都要执行时,就应该使用多个 if。成绩等级只能选择一个结果,所以这里更适合使用 if...elif...else。

嵌套判断 ​

前面的多分支解决了“从同一组条件中选一个结果”,但有些任务有先后依赖:只有第一步成功后,才有必要检查下一步。

如果只有在第一层条件成立后,才需要继续判断第二层条件,可以把一个 if 写进另一个分支中。这种结构叫作嵌套判断。

python
if condition1:
    ...  # 第一层条件成立

    if condition2:
        ...  # 第二层条件也成立
    else:
        ...  # 第二层条件不成立
else:
    ...  # 第一层条件不成立

嵌套判断没有增加新的关键字,重点是看清缩进层级。

案例:细分未及格成绩 ​

成绩等级已经给出大类;现在继续解决“未及格后还要给出不同建议”的问题:

在前面的成绩等级基础上,继续细分 60 分以下的情况:

python
score = int(input("请输入成绩:"))

if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 70:
    print("中等")
elif score >= 60:
    print("及格")
else:
    print("暂未及格")

    if score < 40:
        print("建议先复习基础知识")
    elif score < 50:
        print("建议完成补充练习")
    else:
        print("已经接近及格,继续练习")

只有成绩低于 60 分时,程序才会进入外层 else,继续执行里面的第二层判断。

嵌套成绩判断流程

案例:检查作业提交 ​

提交作业前,需要先登录;登录后,还要确认作业内容不能为空。这两个条件存在先后依赖,适合使用嵌套判断:

python
is_logged_in = True

if is_logged_in:
    homework = input("请输入作业内容:").strip()

    if homework:
        print("作业提交成功")
    else:
        print("作业内容不能为空")
else:
    print("请先登录")

这里不能只看条件数量。选择嵌套结构的原因是:只有登录成功后,才需要接收并检查作业内容。

不要嵌套得太深

嵌套层级越多,代码越难阅读。当前阶段先保证每一层判断关系清楚,并通过空行和统一缩进区分代码块。

条件表达式 ​

最后一个问题:如果只是把两个值中的较大者保存到变量,是否需要写完整的多行分支?

如果判断只是“根据一个条件选择两个值”,可以使用条件表达式。它也常被叫作三元表达式。

先看普通的 if...else 写法:

python
number1 = int(input("请输入第一个数字:"))
number2 = int(input("请输入第二个数字:"))

if number1 > number2:
    max_number = number1
else:
    max_number = number2

print("较大的数字:", max_number)

使用条件表达式可以写成:

python
number1 = int(input("请输入第一个数字:"))
number2 = int(input("请输入第二个数字:"))

max_number = number1 if number1 > number2 else number2
print("较大的数字:", max_number)

条件表达式的结构是:

text
条件成立时的值 if 条件 else 条件不成立时的值

普通 if else 和条件表达式的等价关系图

它适合简单的二选一赋值。如果分支中需要执行多条语句,继续使用普通的 if...else,不要为了缩短代码强行写成一行。

小结 ​

本章沿着 5 个问题推进:

  1. 只在条件成立时执行什么?使用 if
  2. 条件不成立时也要有结果怎么办?使用 if...else
  3. 多个互斥结果如何只选一个?使用 if...elif...else
  4. 后一个判断依赖前一个条件怎么办?使用嵌套 if
  5. 只做简单的二选一赋值,如何缩短写法?使用条件表达式

写判断语句时,重点检查条件顺序、英文冒号和缩进层级。