前言
欢迎来到《跟着娟子姐学Python》第4章的进阶学习!在上一节,我们学习了程序的"顺序结构",代码像流水线一样从上往下执行。但在实际开发中,程序往往需要根据不同情况执行不同操作。例如:年龄大于18岁是成年人,否则是未成年人。这就需要用到我们今天要学的选择结构(分支结构)。
一、初识选择结构
选择结构是根据条件的真假,来决定程序执行哪一段代码。在Python中,选择结构主要分为三种:
- 单分支结构:满足条件就执行,不满足就跳过。
- 双分支结构:满足条件执行A,否则执行B。
- 多分支结构 :满足条件1执行A,满足条件2执行B,......,否则执行Z。
我们可以用一个简单的流程图来表示,如图所示:

二、单分支结构(if 语句)
单分支结构是最简单的逻辑,对应中文的"如果......就......"。
语法格式:
python
if 表达式:
语句块
- 表达式:可以是逻辑运算、比较运算,或者是一个单纯的变量(利用其布尔值)。
- 语句块 :必须缩进(通常4个空格),表示在if满足时执行的代码。
【示例4-2】单分支结构实战
下面代码演示了多种判断场景:
python
# coding:utf-8
# (1) 比较运算符判断
number = eval(input('请输入您的6位中奖号码:'))
if number == 987654:
print('恭喜您,中奖了')
if number != 987654:
print('您未中本期大奖')
# (2) 利用对象的布尔值判断(奇数偶数)
n = 98
if n % 2: # 98%2的余数为0,布尔值为False,取反后为True(这里代码有误,应为 not n%2)
print(n, '为奇数')
if not n % 2: # 余数为0,布尔值为False,not False为True
print(n, '为偶数')
运行结果:

【知识点补充】
在Python中,所有对象都有一个布尔值。数字0、空字符串、None等的布尔值为
False,其他为True。if语句后面可以直接跟一个变量,如if flag:。
三、双分支结构(if...else...)
双分支结构对应中文的"如果......否则......",必定会执行其中一块代码。
语法格式:
python
if 表达式:
语句块1
else:
语句块2
【示例4-3】双分支结构实战
我们可以用更简洁的方式写上面的中奖判断:
python
# coding:utf-8
number = eval(input('请输入您的6位中奖号码:'))
if number == 987654:
print('恭喜您,中奖了')
else:
print('您未中本期大奖')
运行结果:

【进阶写法:条件表达式】
如果是简单的赋值操作,可以使用"三元运算符"来简化
if...else,使代码更Pythonic:
python
# result = "值1" if 条件 else "值2"
# 上面示例可写成:
result = '恭喜您中奖了' if number == 987654 else '您未中本期大奖'
print(result)
# 甚至直接一行输出:
print('恭喜您中奖了' if number == 987654 else '您未中本期大奖')
# 两种方式等价,更推荐第一种,可读性更好。
四、多分支结构(if...elif...else...)
当需要进行多次判断时,就需要用到多分支结构。它类似其他语言中的switch...case,但更灵活。
语法格式:
python
if 表达式1:
语句块1
elif 表达式2:
语句块2
...
elif 表达式n:
语句块n
else:
语句块n+1
- 执行逻辑 :从上往下判断,一旦某个
elif条件为True,就执行对应的语句块,并直接结束整个分支结构,后续所有判断都会被跳过。 else是可选的,相当于"兜底"。
【示例4-4】多分支结构实战:成绩等级划分
这是一个非常经典的案例:
python
# coding:utf-8
score = eval(input('请输入您的成绩:'))
if score < 0 or score > 100:
print('成绩有误')
elif 0 <= score < 60:
print('E')
elif 60 <= score < 70:
print('D')
elif 70 <= score < 80:
print('C')
elif 80 <= score < 90:
print('B')
else:
print('A')
运行结果:

五、结构嵌套:复杂逻辑的实现
在if、elif或else的语句块中,可以再包含一个完整的if结构,这叫分支结构的嵌套 。例如,在判断喝酒了之后,还要判断酒精含量。
【示例4-5】嵌套if:酒驾判断
python
# coding:utf-8
answer = input('请问,您喝酒了吗?')
if answer == 'y': # 外层判断
proof = eval(input('请输入酒精含量:'))
if proof < 20: # 内层判断1
print('构不成酒驾,祝您一路平安')
elif proof < 80: # 内层判断2
print('已构成酒驾标准,请不要开车')
else: # 内层判断3的else
print('已达到醉驾标准,请千万不要开车')
else: # 外层判断的else
print('你走吧,没你啥事儿')
运行结果(喝酒了的情况):

运行结果(没喝酒的情况):

六、逻辑运算符的连接
在实际开发中,判断条件通常很复杂,需要使用and(与)和or(或)连接多个条件。
and:所有条件都为真,结果才为真。or:只要有一个条件为真,结果就为真。
【示例4-6】模拟用户登录(使用and)
python
# coding:utf-8
user_name = input('请输入您的用户名:')
pwd = input('请输入您的密码:')
if user_name == 'ysj' and pwd == '888888':
print('登录成功')
else:
print('用户名或密码不正确')

【示例4-7】成绩有效性判断(使用or)
python
# coding:utf-8
score = eval(input('请输入您的成绩:'))
if score < 0 or score > 100:
print('成绩无效')
else:
print('您的成绩为:', score)

七、本章总结
- 选择结构:让程序拥有了"决策"能力。
if:单分支,条件真则执行。if...else...:双分支,二选一。if...elif...else...:多分支,多选一。- 嵌套
if:处理复杂分层逻辑。 - 逻辑运算符 :
and、or用于组合条件。
下一节,我们将进入更激动人心的循环结构,让程序实现"重复劳动"!
点赞收藏,不迷路!