python19-if和match的美

embedded/2025/3/5 8:49:27/

课程: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 关键字实现选择语句,其最简单的语法形式如下:

python">if 表达式: 语句块

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

如果表达式的值为真,则执行 测试工程师 的打印;如果表达式的值为假,就跳过 语句块,继续执行后面的语句。这种形式的 if 语句相当于汉语里的 如果……就……,其流 程图如下所示。
在这里插入图片描述

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

python">student = "测试工程师"if student == "测试工程师":print("测试工程师")print("学测试\n认准霍格沃兹测试开发")

if…else 判断语句

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

python">if 表达式: 语句块1
else:语句块2

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

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

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

在这里插入图片描述

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

python">student = "测试工程师"
school = "hogwarts"if school == "hogwarts":print("霍格沃兹测试开发")
else:print("测试开发")

if…elif…else 多重条件

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

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

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

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

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

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

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

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

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

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

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

在这里插入图片描述

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

python">food = input("请输入水果的类型:\n")if food == "apple":print("你输入的是苹果")
elif food == "banana":print("你输入的是香蕉")
elif food == "orange":print("你输入的是橘子")
else:print("你触及了我翻译的盲区了:(")

分支嵌套

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

python">if 表达式 1: if 表达式 2: 语句块 1 else: 语句块 2

也能在 else 语句中嵌套

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

还能在 elif 语句中嵌套

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

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

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

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

python">import randomprint("猜拳游戏开始!")
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 等级。

python"># 用户输入分数
score = int(input('输入分数:\n'))# 根据分数判断等级
if score >= 90:grade = 'A'
elif score >= 60:grade = 'B'
else:grade = 'C'# 输出等级和分数
print(f"{score} 属于 {grade} 等级")

计算器

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

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 / num2else:result = "除数不能为零"
else:result = "无效运算符"# 输出计算结果
print("计算结果:", result)

模拟乘车过程

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

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

匹配语句

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

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

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

基本语法结构

match 语法的基本结构如下:

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

python">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("无效的状态码")

匹配模式绑定变量

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

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

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

python"># 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。
    -在这里插入图片描述

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


http://www.ppmy.cn/embedded/170137.html

相关文章

策略模式的C++实现示例

核心思想 策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在独立的类中,使得它们可以互相替换。策略模式让算法的变化独立于使用它的客户端,从而使得客户端可以根据需要动态切换算法,而不需要修改…

主题巴巴主题源码 合辑打包下载+主题巴巴SEO插件 | WordPress主题模版

主题巴巴WordPress主题合辑打包下载,包含博客一号、博客二号、博客X、门户一号、门户手机版、图片一号、杂志一号、自媒体一号、自媒体二号和主题巴巴SEO插件。

Vue.js Vue 测试工具:Vue Test Utils 与 Jest

Vue.js Vue 测试工具:Vue Test Utils 与 Jest 在 Vue.js 的开发过程中,编写和执行测试是确保应用质量和稳定性的关键步骤。Vue Test Utils 和 Jest 是 Vue.js 官方推荐的测试工具,二者结合使用,可以高效地进行单元测试和集成测试…

Rust 面向对象特性解析:对象、封装与继承

1. Rust 的对象概念 在《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书中,作者将对象定义为: 对象是数据和操作该数据的过程的封装体。 按照这个定义&a…

Python+Vue+数据可视化的考研知识共享平台(源码+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 程序介绍 近些年来,科技以一种近乎狂飙突进的态势呈爆发式发展,成果之丰硕…

【密码学——基础理论与应用】李子臣编著 第二章 古典密码 课后习题

免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正! 不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维! 题目 2.1 def decrypt(m):s[]for i in range(len(m)):i…

Leetcode 3474. Lexicographically Smallest Generated String

Leetcode 3474. Lexicographically Smallest Generated String 1. 解题思路2. 代码实现 题目链接:3474. Lexicographically Smallest Generated String 1. 解题思路 这一题思路上主要就是分成两步: 找到所有为T的位置,此时其对应的位置及…

大模型在高血压预测及围手术期管理中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、大模型预测高血压的原理与方法 2.1 常用大模型介绍 2.2 数据收集与预处理 2.3 模型训练与验证 三、术前风险预测与手术方案制定 3.1 术前风险因素分析 3.2 大模型预测术前风险的方法与结果 …