【Python】流程控制语句之分支结构

if 语句(基本判断语句)

1. 语法格式
if 条件:
    # 当条件为 True 时执行此代码块
    语句1
    语句2

说明

  • if 语句会首先判断条件表达式是否为 True
  • if 后跟一个条件表达式,该条件可以是任意能返回布尔值(TrueFalse)的表达式。
  • 如果条件为 True,则执行 if 语句后缩进的代码块。
  • 如果条件为 False,则跳过该代码块,继续执行后面的代码。

示例:判断一个数是否在一个区间内
x = 10
y = 5
if x > 5 and y < 10:
    print("x 大于 5 且 y 小于 10")

#会输出:x 大于 5 且 y 小于 10

if-else 语句(带有 else 分支)

1. 语法格式
if 条件:
    # 当条件为 True 时执行的代码块
    语句1
    语句2
else:
    # 当条件为 False 时执行的代码块
    语句3
    语句4
  • if 后跟一个条件表达式。如果该条件为 True,则执行 if 语句中的代码块。
  • else 后跟的代码块在条件为 False 时执行。
  • else 语句是可选的,但它通常用来提供默认的代码块,当条件为 False 时执行。

示例:判断一个数字是奇数还是偶数
# 获取用户输入的数字
num = int(input("请输入一个整数:"))

# 判断数字是奇数还是偶数
if num % 2 == 0:
    print(f"{num} 是偶数")
else:
    print(f"{num} 是奇数")
  • num % 2 == 0 用来判断一个数是否为偶数。% 是求余运算符,如果一个数除以 2 的余数是 0,那么这个数就是偶数。
  • 如果 num 是偶数,程序会输出 "是偶数"
  • 如果 num 不是偶数(即为奇数),程序会输出 "是奇数"

if-elif-else 语句(多条件分支)

1. 语法格式
if 条件1:
    # 条件1为True时执行的代码块
    语句1
elif 条件2:
    # 条件2为True时执行的代码块
    语句2
elif 条件3:
    # 条件3为True时执行的代码块
    语句3
else:
    # 如果所有条件都为False时执行的代码块
    语句4
  • if:首先检查 条件1,如果 条件1True,则执行 if 语句中的代码块。if 语句后的条件是必需的。
  • elif(可选):表示 “else if”,如果上一个条件为 False,会继续检查 elif 后面的条件。可以有多个 elif 语句。
  • else(可选):表示在所有条件都为 False 时执行的代码块。else 语句是最后的备选项,只在前面所有条件都不成立时执行。

示例 :根据分数判断等级

我们可以根据学生的分数来判断他们的成绩等级,使用 if-elif-else 语句来处理。

score = int(input("请输入你的分数:"))

if score >= 90:
    print("成绩等级:A")
elif score >= 80:
    print("成绩等级:B")
elif score >= 70:
    print("成绩等级:C")
elif score >= 60:
    print("成绩等级:D")
else:
    print("成绩等级:F")

解释:

  1. score >= 90:如果分数大于等于 90,执行第一条语句,输出成绩等级 A
  2. 如果分数小于 90,但大于等于 80,执行第二条 elif,输出成绩等级 B
  3. 如果分数小于 80,但大于等于 70,执行第三条 elif,输出成绩等级 C
  4. 如果分数小于 70,但大于等于 60,执行第四条 elif,输出成绩等级 D
  5. 如果以上条件都不成立(即分数小于 60),执行 else,输出成绩等级 F

三元运算符(条件表达式)

1. 语法格式

三元运算符的语法格式如下:

x if 条件 else y
  • x:当条件为 True 时返回的值。
  • y:当条件为 False 时返回的值。

2. 三元运算符的嵌套使用

Python 中的三元运算符可以嵌套使用,即一个 if-else 语句的 xy 部分也可以是另一个三元运算符。这让我们能够处理多重条件,但需要注意的是,嵌套过多可能影响代码的可读性。

num = int(input("请输入一个数字:"))

# 使用嵌套三元运算符判断区间
result = "大于100" if num > 100 else "大于50" if num > 50 else "小于等于50"

print(f"{num}{result}")

解释:

  • 首先判断 num > 100,如果为 True,则返回 "大于100"
  • 如果 num <= 100,则继续判断 num > 50,如果为 True,返回 "大于50"
  • 如果两个条件都不满足(即 num <= 50),返回 "小于等于50"

示例:判断一个数字是奇数还是偶数
num = int(input("请输入一个数字:"))

# 使用三元运算符判断奇偶
result = "偶数" if num % 2 == 0 else "奇数"

print(f"{num}{result}")

解释:

  1. num % 2 == 0 是条件,它判断 num 是否能被 2 整除,即是否是偶数。
  2. 如果条件 num % 2 == 0True(即 num 是偶数),则 result 被赋值为 "偶数"
  3. 如果条件为 False(即 num 是奇数),则 result 被赋值为 "奇数"

match-case 语句(Python 3.10+)

Python 3.10 引入了一个新的控制流结构:match-case。它类似于其他编程语言中的 switch-case 语句,但更加灵活和强大。match-case 可以对一个表达式的值进行模式匹配,并根据匹配的情况执行不同的代码块。

这种语法可以用于处理更复杂的匹配逻辑,而不仅仅是简单的常量比较,因此它比传统的 if-elif-else 语句更加直观和高效。

1. 语法格式
match expression:
    case pattern1:
        # 如果 expression 匹配 pattern1,执行这里的代码
    case pattern2:
        # 如果 expression 匹配 pattern2,执行这里的代码
    case _:
        # 如果没有匹配任何模式,执行这里的代码
  • expression:这是我们要进行匹配的表达式,它的值会被与各个 case 模式进行比较。
  • case:表示每个模式,每个 case 后面可以有一个或多个模式。
  • _ (下划线) :它是一个通配符,用来匹配任何值,相当于 else 语句。如果没有匹配到其他模式,case _ 会被执行。

2. 匹配元组
def describe_point(point):
    match point:
        case (0, 0):
            return "原点"
        case (0, y):
            return f"y轴上的点,y={y}"
        case (x, 0):
            return f"x轴上的点,x={x}"
        case (x, y):
            return f"点({x}, {y})"
        case _:
            return "未知点"

print(describe_point((0, 0)))  # 输出: 原点
print(describe_point((3, 0)))  # 输出: x轴上的点,x=3
print(describe_point((0, 5)))  # 输出: y轴上的点,y=5
print(describe_point((4, 5)))  # 输出: 点(4, 5)

解释:

  • 我们在 match 语句中传入一个元组 point
  • case (0, 0) 用于匹配原点 (0, 0),如果匹配成功,返回 "原点"
  • case (0, y)case (x, 0) 用于匹配分别位于 y 轴和 x 轴上的点。yx 会捕获元组中的值。
  • 如果没有匹配到上述的情况,case _ 会匹配任何其他的点。

3. 匹配列表
def match_list(lst):
    match lst:
        case []:
            return "空列表"
        case [first, second]:
            return f"列表有两个元素: {first}, {second}"
        case [first, *rest]:
              return f"第一个元素是 {first}, 其余元素是 {rest}"
        case _:
            return "其他情况"print(match_list([]))

解释:

  • []:匹配空列表。
  • [first, second]:匹配只有两个元素的列表。
  • [first, *rest]first 绑定列表第一个元素,rest 绑定剩余元素。

4. 匹配字典

match-case 语句也可以用于匹配字典中的特定键值对:

def describe_person(person):
    match person:
        case {"name": name, "age": age}:
            return f"姓名: {name}, 年龄: {age}"
        case {"name": name}:
            return f"姓名: {name}, 年龄未知"
        case _:
            return "未知人员"

# 测试
print(describe_person({"name": "Alice", "age": 30}))  # 输出: 姓名: Alice, 年龄: 30
print(describe_person({"name": "Bob"}))  # 输出: 姓名: Bob, 年龄未知
print(describe_person({"nickname": "Charlie"}))  # 输出: 未知人员

解释:

  • 使用 case {"name": name, "age": age},我们匹配一个字典,字典中有 nameage 这两个键。如果匹配成功,nameage 会分别获取相应的值。
  • 如果字典只有 name 键,case {"name": name} 会匹配到并返回 "姓名: {name}, 年龄未知"
  • 如果字典不包含这些键,case _ 会匹配到并返回 "未知人员"

5. 匹配类

match-case 可以通过模式匹配类实例,提取对象的属性。这让我们可以更方便地操作面向对象编程中的对象。

class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

class Cat(Animal):
    def __init__(self, name, color):
        super().__init__(name)
        self.color = color

def describe_animal(animal):
    match animal:
        case Dog(name, breed):
            return f"狗的名字是 {name}, 品种是 {breed}"
        case Cat(name, color):
            return f"猫的名字是 {name}, 颜色是 {color}"
        case Animal(name):
            return f"动物的名字是 {name}"
        case _:
            return "未知动物"

# 测试
dog = Dog("Rex", "Golden Retriever")
cat = Cat("Whiskers", "White")

print(describe_animal(dog))  # 输出: 狗的名字是 Rex, 品种是 Golden Retriever
print(describe_animal(cat))  # 输出: 猫的名字是 Whiskers, 颜色是 White

解释:

  • 我们定义了 DogCat 类,它们继承自 Animal 类,并添加了各自特有的属性。
  • describe_animal 函数中,通过 match 来根据对象的类型进行匹配。Dog(name, breed)Cat(name, color) 会从对象中提取属性。
  • 如果 animalDog 类型的实例,就匹配并返回狗的信息;如果是 Cat 类型的实例,就返回猫的信息;如果是其他类型的 Animal 实例,则返回通用的动物信息。

示例:加减乘除的计算
a = float(input("输入第一个数"))
b = float(input("输入第二个数"))
c = input("输入一个运算符(+,-,*,/)")

match c:
    case '+':
        print(f"{a}+{b}={a+b}")
    case '-':
        print(f"{a}-{b}={a-b}")
    case '*':
        print(f"{a}*{b}={a*b}")
    case '/':
        print(f"{a}/{b}={a/b}")
    case _:
        print("无效的运算符")

解释:

  • 通过匹配c的值来输出对应的语句
  • - :来过滤输入的其他运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值