跳到主要内容

2.2 做出判断的分支

知识点​

1.为什么需要分支​

顺序结构只能"一条道走到黑",但现实中大量问题需要"根据情况选择做法":

  • 成绩 60 分以上算及格,否则不及格;
  • 密码正确才允许登录;
  • 闰年 2 月 29 天,平年 28 天。

选择结构(分支结构):程序根据条件是否成立,选择执行不同的语句。

流程图特征:出现菱形(判断框),流程线分叉后再汇合,两个出口分别标"是/否"。

2.条件从哪来:关系运算符​

运算符含义示例结果
>大于5 > 3True
<小于5 < 3False
>=大于等于5 >= 5True
<=小于等于5 <= 3False
==等于5 == 5True
!=不等于5 != 3True

两个铁律:

  1. 判断相等用 ==(两个等号),不是 =——= 是赋值,写 if x = 5: 会报 SyntaxError;
  2. 关系运算的结果是 bool 类型(True / False),不是数字。

注意:>= 与 <= 的顺序不能颠倒,写成 => 或 =< 都是语法错误。

也可以直接判断字符串(按字符编码逐个比较):

print("abc" == "abc") # True
print("abc" == "ABC") # False(区分大小写)
print("apple" < "banana") # True(按首字母编码比较)

3.复合条件:逻辑运算符​

运算符含义规则示例
and与全真才真,有一个假即假x > 60 and x < 80
or或一真即真,全假才假x < 0 or x > 100
not非取反not (x == 0)

真值表(背下来):

ABA and BA or Bnot A
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue

优先级:not → and → or;括号可改变顺序,复杂条件一律加括号。

短路求值(Python 特性,考试偶有):

  • A and B:A 为假时不再计算 B,直接得假;
  • A or B:A 为真时不再计算 B,直接得真。

实用价值:if n != 0 and 100 / n > 5: —— 若 n == 0,后面的除法不会执行,避免除零错误。注意顺序不能反。

Python 的区间写法(易错):数学里的 60 <= x <= 80 在 Python 里可以写成 60 <= x <= 80,但不能写成 x >= 60 and <= 80(少了左边的变量名会报错)。

4.单分支:if​

语法格式:

if 条件:
语句块

两条硬性语法要求:

  1. 条件后面必须有英文冒号 :;
  2. 语句块必须缩进(一般 4 个空格),缩进相同的连续语句属于同一个语句块。

执行流程:条件为 True → 执行语句块;为 False → 跳过,继续执行后面的语句。

# 2-3 判断是否及格
score = int(input("请输入成绩:"))
if score >= 60:
print("及格")
print("程序结束") # 这句话不属于 if 的语句块,无论及格与否都会执行

缩进的本质:Python 用缩进表示"从属关系",而不是用大括号。缩进错了,逻辑就错了,这是 Python 最独特的语法特点。

5.双分支:if-else​

语法格式:

if 条件:
语句块1 # 条件成立时执行
else:
语句块2 # 条件不成立时执行

特点:两条路必走其一,且只走一条。

# 2-4 判断奇偶
n = int(input("请输入一个整数:"))
if n % 2 == 0:
print(n, "是偶数")
else:
print(n, "是奇数")

else 后面不能写条件(else: 后面直接冒号),因为它的含义就是"其他所有情况"。

6.多分支:if-elif-else​

语法格式:

if 条件1:
语句块1
elif 条件2:
语句块2
elif 条件3:
语句块3
else:
语句块4 # 可省略

执行流程(关键):自上而下依次判断,一旦某个条件成立,执行对应语句块后立即跳出整个结构,后面的条件不再判断。

# 2-5 成绩等级
score = int(input("请输入成绩:"))
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "E"
print("等级:", grade)

为什么这里不用写 score >= 80 and score < 90:因为能走到 elif score >= 80 这一行,说明前面的 score >= 90 已经不成立,所以 score < 90 是隐含条件。这是 elif 最省事也最容易看不懂的地方。

elif 与"多个独立 if"的区别(高频考点):

写法行为结果差异
if - elif - else互斥,只执行一个分支成绩 95 只输出 A
多个并列 if每个 if 都独立判断,可能执行多个若写成 if >=60: D 和 if >=90: A,95 分会同时输出 D 和 A

结论:分段判断一定用 elif;只有"彼此无关的多件事"才用并列 if。

7.嵌套分支​

定义:在 if 的语句块中再写一个 if。

用途:需要先判一层、再判一层的问题,如"先判断是否闰年,再判断月份天数"。

# 2-6 判断闰年(能被 4 整除且不能被 100 整除,或能被 400 整除)
year = int(input("请输入年份:"))
if year % 4 == 0:
if year % 100 == 0:
if year % 400 == 0:
print(year, "是闰年")
else:
print(year, "不是闰年")
else:
print(year, "是闰年")
else:
print(year, "不是闰年")

同一问题的更简洁写法(用逻辑运算符合并):

if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print(year, "是闰年")
else:
print(year, "不是闰年")

嵌套的要点:每深入一层多缩进 4 个空格;嵌套层次不宜超过 3 层,否则可读性差(可考虑用 elif 或函数拆分)。

8.条件表达式(单行 if,可了解)​

# 语法:值1 if 条件 else 值2
result = "及格" if score >= 60 else "不及格"

含义:条件成立取值 1,否则取值 2。只能写简单的二选一,复杂逻辑仍应用 if-else。

9.典型应用题型​

题型判断条件要点
奇偶判断n % 2 == 0偶数成立
正负判断n > 0 / n < 0 / n == 0三分支,注意 0
绝对值x < 0 时取 -x双分支,0 归入非负
成绩等级分段 >=90、>=80…用 elif,从高到低写
分段计费(水费、出租车)分段函数用 elif,每段算超出部分
闰年判断(y%4==0 and y%100!=0) or y%400==0注意 1900 不是闰年、2000 是
三角形能否构成a+b>c and a+c>b and b+c>a三边关系,三个条件同时成立
最大值(三数)两两比较可嵌套,也可用 max()
登录验证user == "admin" and pwd == "123456"用 and 连接
字符类别判断比较 ASCII 范围或 isalpha()/isdigit()见 3.1 字符编码

分段计费示例(出租车:3 km 内 10 元,超出部分每公里 2 元):

km = float(input("行驶里程(km):"))
if km <= 3:
fee = 10
else:
fee = 10 + (km - 3) * 2
print(f"车费 {fee:.2f} 元")

10.易错点清单(考试最爱设的坑)​

序号错误写法问题正确写法
1if x = 5:= 是赋值if x == 5:
2if x > 5 (无冒号)缺冒号,SyntaxErrorif x > 5:
3if x > 5: 后不缩进IndentationError语句块缩进 4 空格
4用中文冒号 :SyntaxError用英文冒号 :
5if 60 <= x <= 80 写成 if x >= 60 and <= 80缺变量名if 60 <= x <= 80
6分段判断用多个并列 if可能重复输出用 elif
7浮点数直接 == 比较0.1+0.2 == 0.3 为 False用 abs(a-b) < 1e-9
8else ifPython 没有这个写法elif
9缩进混用 Tab 与空格IndentationError统一 4 空格
10if score >= 90: 写在 elif score >= 80: 之后顺序错,90 分被判成 B条件从严到宽、从高到低排

第 10 条要特别强调:多分支的书写顺序决定结果,必须从最严格的条件开始。

11.速查表​

序号考点结论
1选择结构的流程图符号菱形(判断框),两个出口
2判断相等==(= 是赋值)
3关系运算结果bool(True/False)
4and全真才真
5or一真即真
6not取反
7逻辑优先级not → and → or
8短路求值and 左假即停;or 左真即停
9单分支语法if 条件: + 缩进语句块
10双分支if … else …,必走其一
11多分支if … elif … elif … else …,互斥只走一个
12elif 的条件可省一半前面的条件已不成立,是隐含条件
13分段判断必须用elif(不是并列 if)
14多分支书写顺序从严到宽、从高到低
15缩进4 个空格,同缩进属同一语句块
16闰年条件(y%4==0 and y%100!=0) or y%400==0
17三角形条件任意两边之和大于第三边(三条件 and)
18条件表达式A if 条件 else B
19浮点比较不用 ==,用差值小于 1e-9
20冒号必须是英文冒号

12.课堂提示(讲课参考)​

  • 先画流程图再写代码:成绩等级题让学生先画菱形链,再逐行翻译,elif 的"隐含条件"就自然懂了。
  • 现场演示"并列 if"的坑:把 elif 全改成 if,输入 95 会输出一串等级,学生一下就记住"互斥"这个词。
  • 缩进用"俄罗斯套娃"比喻:每进一层多缩 4 格,出层就退回来。
  • 闰年题连问三年:1900(不是)、2000(是)、2024(是)——把 %100 与 %400 两个例外讲透。
  • 中文冒号现场制造一次错误,并在投影上放大 SyntaxError 提示,让学生学会读报错。