python19-if和match的美

课程:B站大学
记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化

分支语句那些事儿

    • if 条件判断
    • if...else 判断语句
    • if...elif...else 多重条件
    • 分支嵌套
    • 也能在 else 语句中嵌套
    • 还能在 elif 语句中嵌套
    • 猜拳游戏
    • 成绩判断
    • 计算器
    • 模拟乘车过程
  • 匹配语句
    • match 语法的基本结构如下:
    • | 组合多个匹配值
    • 匹配模式绑定变量
  • 实践是检验真理的唯一标准


# 分支语句 ## 什么是分支语句 在生活中,总是要做出许多选择。

比如在学习的时候有文科和理科区分,对应的学生们就有擅长、喜欢文科和擅长、喜欢理科的。

针对于不同的擅长、喜欢的方向在将来也有不同的职业发展,擅长、喜欢文科可能以后的择业就会偏向历史、地理等。

而擅长、欢理科的可能以后的择业方向就有数学、生物、编程(软件)等等方向;

在大方向的选择之后还有更细粒度的选择方向,拿大家学习的软件从业来讲,还有软件测试、软件开发、产品和项目经理等方向可供选择。

程序也是一样。下面给出几个常见的例子:

  • 如果购买商品成功,用户余额减少,用户积分增多。
  • 如果输入的用户名和密码正确,提示登录成功,进入网站,否则,提示登录失败。
  • 如果用户使用微信登录,则使用微信扫一扫;如果使用 QQ 登录,则输入 QQ 号和密码;
    如果使用微博登录,则输入微博账号和密码;如果使用手机号登录,则输入手机号和验证码。

以上不同场景下做出的不同行为,就是程序中的选择语句,也称为条件语句,即按照条件选择执行不同 的代码片段。

Python 中选择语句主要有 3 种形式,分别为 if 语句、if…else 语句和 if…elif…else 多分支语句。

if 条件判断

Python 中使用 if 关键字实现选择语句,其最简单的语法形式如下:

if 表达式: 
    语句块

其中,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式(例如, 是否是测试工程师)。

如果表达式的值为真,则执行 测试工程师 的打印;如果表达式的值为假,就跳过 语句块,继续执行后面的语句。这种形式的 if 语句相当于汉语里的 如果……就……,其流 程图如下所示。
python19-if和match的美_第1张图片

把以上流程转换成为Python代码

student = "测试工程师"

if student == "测试工程师":
    print("测试工程师")

print("学测试\n认准霍格沃兹测试开发")

if…else 判断语句

如果遇到只能二选一的条件,Python 中提供了 if…else 语句解决类似问题,其语法格式如下:

if 表达式: 
    语句块1
else:
    语句块2

使用 if…else 语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式(例如判断 school 是否为 hogwarts)。

如果满足条件,则执行 if 后面的语句块(打印霍格沃兹测试开发),否则,执行 else 后面的语句块(打印测试开发)。

这种形式的选择语句相当于汉语里的 如果……否则……,其流程图如图所示。

python19-if和match的美_第2张图片

把以上流程转换成为 Python 代码

student = "测试工程师"
school = "hogwarts"

if school == "hogwarts":
    print("霍格沃兹测试开发")
else:
    print("测试开发")

if…elif…else 多重条件

网上购物时,通常都有多种付款方式以供选择,比如支付宝支付、银联支付、微信支付等等。这时用户就需要从多个选项中选择一个。

在开发程序时,如果遇到多选一的情况,则可以使用 if…elif…else 语句。

该语句是一个多分支选择语句,通常表现为 如果满足某种条件,进行某种处理,否则,如果满足另一种条件,则执行另一种处理……。

if…elif…else 语句的语法格式如下:

if 表达式: 
    语句块1
elif 表达式: 
    语句块2 
...
else:
    语句块n

使用 if…elif…else 语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式(例如判断 food 是否为 apple)。

如果满足条件,则执行 if 后面的语句块(打印苹果),如果表达式为假,就跳过第一个语句块,进行第二个表达式的执行(例如判断 food 是否为 banana)。

如果第二个表达式满足条件,则执行 elif 后面的语句块(打印香蕉),如果第二个表达式为假,就跳过第二个语句块,进行第三个表达式的执行(例如判断 food 是否为 orange)。

如果三个表达式满足条件,则执行 elif 后面的语句块(打印橘子),如果三个表达式为假,就跳过第三个语句块,执行 else 后面的语句块。

只有在所有表达式都为假的情况下,才会执行 else 中的语句。

这种形式的选择语句相当于汉语里的 如果……如果……否则……,其流程图如图所示。

python19-if和match的美_第3张图片

把以上流程转换成为 Python 代码

food = input("请输入水果的类型:\n")

if food == "apple":
    print("你输入的是苹果")
elif food == "banana":
    print("你输入的是香蕉")
elif food == "orange":
    print("你输入的是橘子")
else:
    print("你触及了我翻译的盲区了:(")

分支嵌套

前面介绍了 3 种形式的 if 选择语句,这 3 种形式的选择语句之间都可以进行互相嵌套。例如,在最简单的 if 语句中嵌套 if…else 语句,形式如下:

if 表达式 1: 
    if 表达式 2: 
        语句块 1 
    else: 
        语句块 2

也能在 else 语句中嵌套

if 表达式 1: 
    if 表达式 2: 
        语句块 1 
    else: 
        语句块 2
else: 
    if 表达式 3: 
        语句块 3 
    else: 
        语句块 4

还能在 elif 语句中嵌套

if 表达式 1: 
    if 表达式 2: 
        语句块 1 
    else: 
        语句块 2
elif 表达式 3: 
    if 表达式 4: 
        语句块 3 
    else: 
        语句块 4
else: 
    if 表达式 5: 
        语句块 5 
    else: 
        语句块 6

if 选择语句可以有多种嵌套方式,在开发程序时,可以根据自身需要选择在合适的分支基础上进行嵌套,但一定要严格控制好不同级别代码块的缩进量。

课程开始的例子转换成 Python 代码:

name = input("请输入你的名字:\n")
hobby = int(input("请选择你擅长/喜欢的科目,文科选1,理科选2:\n"))
if hobby == 1:
    orientation_choose = int(input("请选择你想要的职业,历史选1,地理选2:\n"))
    if orientation_choose == 1:
        orientation = "历史"
    else:
        orientation = "地理"
else:
    orientation_choose = int(input("请选择你想从业的方向:数学选1,生物选2,编程选3\n"))
    if orientation_choose == 1:
        orientation = "数学"
    elif orientation_choose == 2:
        orientation = "生物"
    else:
        coder_choose = int(input("请选择你想从事的软件职业方向:测试选1,开发选2,产品选3,项目经理选4\n"))
        if coder_choose == 1:
            orientation = "测试"
        elif coder_choose == 2:
            orientation = "开发"
        elif coder_choose == 3:
            orientation = "产品"
        else:
            orientation = "项目经理"
print(f"{name} 同学,你意向的职业为: {orientation}")

通过转换出来的代码,就能使用条件语句 if 实现学生的求职意向调查的简单逻辑了。

猜拳游戏

编写一个Python程序,实现一个简单的猜拳游戏。玩家和电脑各自选择石头、剪刀或布,根据规则判断胜负关系,并输出比赛结果。

import random

print("猜拳游戏开始!")
player = input("请出拳(石头/剪刀/布):")
computer = random.choice(["石头", "剪刀", "布"])

print(f"电脑出拳:{computer}")

if player == computer:
    print("平局!")
elif (player == "石头" and computer == "剪刀") or \
     (player == "剪刀" and computer == "布") or \
     (player == "布" and computer == "石头"):
    print("玩家胜利!")
else:
    print("电脑胜利!")

成绩判断

编写一个 Python 程序,用户输入一个分数,程序将根据分数判断并输出相应的等级。分数在 90 分及以上为 A 等级,60 -89 分为 B 等级,否则为 C 等级。

# 用户输入分数
score = int(input('输入分数:\n'))

# 根据分数判断等级
if score >= 90:
    grade = 'A'
elif score >= 60:
    grade = 'B'
else:
    grade = 'C'

# 输出等级和分数
print(f"{score} 属于 {grade} 等级")

计算器

编写一个简单的Python程序,实现一个简易的计算器。用户可以输入两个数字和一个运算符(+、-、*、/),程序将根据运算符执行相应的计算操作,并输出结果。

num1 = float(input("请输入第一个数字:"))
num2 = float(input("请输入第二个数字:"))
operator = input("请输入运算符(+、-、*、/):")

# 根据运算符执行相应的计算操作
if operator == '+':
    result = num1 + num2
elif operator == '-':
    result = num1 - num2
elif operator == '*':
    result = num1 * num2
elif operator == '/':
    if num2 != 0:
        result = num1 / num2
    else:
        result = "除数不能为零"
else:
    result = "无效运算符"

# 输出计算结果
print("计算结果:", result)

模拟乘车过程

编写一个 Python 程序,模拟乘坐公交车过程,并且可以有座位坐下。要求:输入公交卡当前的余额,只要不低于2元,就可以上公交车;如果车上有空座位,就可以坐下。

CardCash = int(input('请输入您的公交卡余额:'))
if CardCash >= 2:
    print('余额足够,您可以上车了')
    isSeat = input('车上是否有空座位(有/没有)?')
    if isSeat == '有':
        print('您可以坐下')
    else:
        print('没有座位,只能站着')
else:
    print('余额不够,您不能上车')

匹配语句

在 Python 中,match 是 Python3.10 版本引入的一种模式匹配语法。

它提供了一种简洁而强大的方式来匹配和处理不同模式的逻辑,当成功匹配一个模式时,就执行该模式后的代码块。

match 语句适用于有限的精准值的匹配,不适用于范围值的判断。

基本语法结构

match 语法的基本结构如下:

match value:
    case pattern1:
        # 处理 pattern1 匹配成功的情况
    case pattern2:
        # 处理 pattern2 匹配成功的情况
    ...
    case patternN:
        # 处理 patternN 匹配成功的情况
    case _:
        # 处理所有其他情况的匹配(相当于默认情况)
  • match 表示匹配模式的开始
  • value 表示需要进行匹配的目标值
  • case 表示提供一个匹配模式
  • pattern 表示被匹配的值,该值一般为一个字面量值。
  • 表示当所有模式都未匹配成功,则执行该模式下的代码块,本质上-是一个变量,用来匹配任意值。
    示例: 根据输入 httpCode 值不同,输出对应的描述
httpCode = int(input("请输入一个HTTP状态码:"))

match httpCode:
    case 101:
        print("临时响应")
    case 200:
        print("请求成功")
    case 301:
        print("重定向")
    case 404:
        print("页面找不到")
    case 500:
        print("服务器内部错误")
    case _:
        print("无效的状态码")

| 组合多个匹配值

match 可以在一个匹配模式中,提供多个匹配值,使用 | 组合,在匹配时,只要成功匹配其中一个值即可。

示例: 改进 HTTPCode 示例,可以匹配不同级别中的更多状态码

httpCode = int(input("请输入一个HTTP状态码:"))

match httpCode:
    case 100 | 101:
        print("临时响应")
    case 200 | 201 | 203 | 204 | 205:
        print("请求成功")
    case 301 | 304 | 307:
        print("重定向")
    case 401 | 403| 404 | 405:
        print("页面找不到")
    case 500 | 502 | 503:
        print("服务器内部错误")
    case _:
        print("无效的状态码")

匹配模式绑定变量

在提供匹配值时,除可以提供字面值外,还可以提供变量,用来匹配任意值,如 _,但是在一个匹配语句中,只能出现一个独立的匹配变量。

在编写程序过程中,如果需要动态匹配部分数据,比如一个元组中的部分值,此时可以通过绑定变量的方式,提供一个字面值和变量的混合匹配模式,字面值用来精确匹配,变量用来模糊匹配。

示例:输入一个坐标,输出该坐标点的位置。

# point is an (x, y) tuple
x = int(input("x:"))
y = int(input("y:"))
point = (x, y)
match point:
    case (0, 0):
        print("坐标在原点上")
    case (0, y):
        print(f"坐标在Y轴上")
    case (x, 0):
        print(f"坐标在X轴上")
    case (x, y):
        print(f"X={x}, Y={y}")
    case _:
        raise ValueError("没有这个坐标点")

上面代码中:

  • 第一个模式有两个字面值,这两个字面值都能精确匹配者能成功匹配当前模式。
  • 第二,三两个模式结合了一个字面值和一个变量,而变量绑定了一个来自目标的值
    point,此时,字面值需要精确匹配,而绑定的变量可以匹配该位置的任意值。
  • 第四个模式捕获了两个值,此时,目标值中的任意值都会被成功匹配。
  • 这使得它在概念上类似于解包赋值 (x, y) = point。
    -python19-if和match的美_第4张图片

实践是检验真理的唯一标准

你可能感兴趣的:(python自动化,python)