Featured image of post 条件语句(if and match-case)

条件语句(if and match-case)

Conditional statement (if and match-case)

条件运算

布尔型

布尔型(bool)表示条件的真假,只有两个取值:True(真)和 False(假)。

  • 任何数据都可以通过 bool() 函数转换为布尔型。
  • 空数据(如 0, 0.0, ’’ 等)转换为 False,其他值为 True

比较运算符

用于比较相同类型的数据,结果为布尔型。常用比较运算符:

  • 大于:>
  • 小于:<
  • 大于等于:>=
  • 小于等于:<=
  • 不等于:!=
  • 相等:==

逻辑运算符

用于组合多个条件。常用逻辑运算符:

  • and(与):多个条件同时成立,结果为 True
  • or(或):多个条件只需一个成立,结果为 True
  • not(非):取反,将 True 变为 False,反之亦然。

成员运算符

用于测试一个值是否存在于序列或集合中。成员运算符:

  • in:如果找到值在序列中,返回 True
  • not in:如果未找到值在序列中,返回 False

身份运算符

用于比较两个对象的内存地址,即判断两个对象是否为同一对象。身份运算符:

  • is:如果两个变量引用同一个对象,返回 True
  • is not:如果两个变量引用不同对象,返回 False

条件分支

条件分支语句使程序能够根据条件的真假来决定执行哪一部分代码。主要包括三种结构:

  1. 单分支:仅在条件成立时执行语句块。
  2. 二分支:根据条件的真假分别执行不同的语句块。
  3. 多分支:根据多个条件中的一个成立情况执行相应的语句块。

img1

单分支结构

语法格式:

1
2
if <条件>:
    语句块
  • if 是关键字,后有一个空格。
  • <条件> 是表达式,其结果为布尔型。
  • 条件语句结束后必须使用冒号 :
  • 语句块是条件成立后执行的一条或多条语句,必须缩进(4个空格)。

案例解释:
用户输入考试成绩,判断成绩是否及格(60分及格)。

1
2
3
score = input('请输入您的考试成绩:')
if score >= 60:
    print("您的考试成绩及格了,晚上加鸡腿!")

二分支结构

语法结构:

1
2
3
4
if <条件>:
    语句块1
else:
    语句块2
  • 如果 <条件> 成立,执行 语句块1
  • 如果 <条件> 不成立,执行 语句块2

案例解释:
用户输入考试成绩,判断成绩是否及格。

1
2
3
4
5
score = input('请输入您的考试成绩:')
if score >= 60:
    print("您的考试成绩及格了,晚上加鸡腿!")
else:
    print("考试不及格,晚上通宵学代码!")

多分支结构

语法结构:

1
2
3
4
5
6
7
8
9
if <条件1>:
    代码块1
elif <条件2>:
    代码块2
...
elif <条件n-1>:
    代码块n-1
else:
    代码块n
  • 从第一个条件开始,哪个条件成立,就执行对应的代码块。
  • 如果没有任何条件成立,则执行 else 下的代码块(else 是可选的)。

案例解释:
用户输入成绩,程序根据不同的分数区间判断并输出成绩等级(A, B, C, D, E)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
score = float(input("请输入您的考试成绩:"))

if score < 40:
    grade = "E"
elif score <= 59:
    grade = "D"
elif score <= 75:
    grade = "C"
elif score <= 85:
    grade = "B"
elif score <= 100:
    grade = "A"
else:
    grade = "无效成绩"

print(f"您的成绩等级为: {grade}")

Match-Case 语句

概述

match-case 是 Python 3.10 引入的一项新特性,旨在通过模式匹配简化条件判断逻辑。它不仅适用于简单值,还能处理序列、字典和类实例等复杂数据结构。

关键点:

  • match-case 比传统的 if-elif-else 结构更直观,尤其适合多分支场景。
  • 它支持多种匹配类型,如常数、列表、字典、对象等。

基本语法

1
2
3
4
5
6
7
8
match <表达式>:
    case <模式1>:
        语句块1
    case <模式2>:
        语句块2
    ...
    case _:
        语句块n+1  # 处理所有其他情况

解释:

  • match 后跟一个表达式,用于获取匹配值。
  • 每个 case 后面是要测试的模式。匹配成功时执行相应语句块。
  • _ 用于默认情况,类似于传统的 else 语句。

使用守卫条件

1
2
3
4
5
6
7
match number:
    case n if n > 0:
        print(f"{n} 大于0")
    case n if n < 0:
        print(f"{n} 小于0")
    case _:
        print(f"{n} 等于0")

解释:

  • case 后添加 if 关键字,可以对匹配结果进行额外判断。
  • 这有助于精确控制匹配逻辑,适用于需要多层次条件检查的情况。

高级模式匹配

匹配序列

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
point = (2, 1)

match point:
    case (0, 0):
        print("点位于坐标原点")
    case (0, y):
        print(f"数据位置在y轴上,y={y}")
    case (x, 0):
        print(f"数据位置在x轴上,x={x}")
    case (x, y):
        print(f"坐标为({x}, {y})")

解释:

  • 使用元组模式匹配,可以处理多种点的位置情况。
  • 每个 case 检查点的不同组合,并执行相应的操作。

匹配字典

1
2
3
4
5
6
7
8
9
user = {"name": "Alice", "age": 30}

match user:
    case {"name": "Alice"}:
        print("用户是Alice")
    case {"age": 25}:
        print("年龄是25岁")
    case _:
        print("未匹配到任何条件")

解释:

  • 对于字典,可以匹配特定的键值对。
  • 使用通配符 _ 处理未列出的情况,避免遗漏。

注意事项

  1. 模式匹配顺序: match-case 会按定义的顺序检查每个 case,一旦找到匹配的情况,就会执行该语句块,不再继续检查后续的条件。

  2. 不可变对象: match-case 最适合处理不可变对象,如数字、字符串和元组,因为它们在匹配时不会改变状态。要谨慎使用可变对象(如列表),因为可能导致意外行为。

  3. 默认情况: 建议始终包含一个 case _,用于处理所有未被其他 case 处理的情况,这样可以避免遗漏。

本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可(CC BY-NC-SA 4.0)
文章浏览量:Loading
Powered By MC ZBD Studio
发表了21篇文章 · 总计29.03k字
载入天数...载入时分秒...
总浏览量Loading | 访客总数Loading

主题 StackJimmy 设计
由ZephyrBD修改