模式匹配 match... case
结构模式匹配就是用一个清晰的 模板 去精准地匹配数据的结构和内容,匹配成功则执行相应的操作。
执行流程
1、首先计算match指定的表达式的值。
2、从上到下依次和case后面的值进行匹配,匹配正确,就执行对应语句。
3、如果前面所有的case都没有匹配上,就会执行默认的case _。
python
# 工作日程安排
day = input("请输入星期几(1-7):")
match day:
case "1":
print("周一:工作会议日")
case "2":
print("周二:学习培训日")
case "3":
print("周三:项目开发日")
case "4":
print("周四:代码审查日")
case "5":
print("周五:总结规划日")
case "6" | "7": # 其中的| 表示或的关系,匹配多个模式中的任意一个
print("周末:休息放松日")
case _: # 匹配其他所有情况
print("输入错误!")
python
# 实现一个计算器,可以实现 + - * / 运算,用户输入需要运算的两个数以及运算符之后,就可以进行计算。
num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))
oper = input("请输入运算符( + - * / ):")
match oper:
case "+":
print(f"{num1} + {num2} = {num1 + num2}")
case "-":
print(f"{num1} - {num2} = {num1 - num2}")
case "*":
print(f"{num1} * {num2} = {num1 * num2}")
case "/" if num2 != 0: # if条件成立,才匹配这个case
print(f"{num1} / {num2} = {num1 / num2}")
case _:
print("操作不支持!")
"""
请输入第一个数:10
请输入第二个数:2
请输入运算符( + - * / ):/
10.0 / 2.0 = 5.0
"""
'''
请输入第一个数:5
请输入第二个数:0
请输入运算符( + - * / ):/
操作不支持!
'''
match...case 是3.10版本中的新语法
应用场景总结:
match:基于某个变量的多个固定值进行分支判断时,可以使用match模式匹配
if:条件判断涉及复杂的逻辑判定、范围比较及组合条件时
python
# 案例:请你编写一个游戏角色移动控制系统,根据玩家输入的不同指令,控制游戏角色执行相应的(输出控制台)。
# 游戏角色移动控制系统 ------ 使用match case 写法
cmd = input("请输入控制指令:")
match cmd:
case "上" | "w" | "W":
print("角色向上移动")
case "下" | "s" | "S":
print("角色向下移动")
case "左" | "a" | "A":
print("角色向左移动")
case "右" | "d" | "D":
print("角色向右移动")
case "跳" | " " :
print("角色跳跃")
case "攻击" | "j" | "J":
print("角色发动攻击")
case "退出" | "esc" | "ESC":
print("角色退出游戏")
case _:
print("输入指令无效,请重新输入!")
# 循环进阶版(更像游戏)
# 循环版游戏控制(match...case 写法)
print("===== 游戏角色控制系统 =====")
while True: #效果就是:输一次指令 → 执行 → 又可以输 → 又执行 → 一直玩下去
cmd = input("请输入指令:")
match cmd:
case "上" | "w" | "W":
print("→ 角色向上移动")
case "下" | "s" | "S":
print("→ 角色向下移动")
case "左" | "a" | "A":
print("→ 角色向左移动")
case "右" | "d" | "D":
print("→ 角色向右移动")
case "跳" | " ":
print("→ 角色跳跃")
case "攻击" | "j" | "J":
print("→ 角色发动攻击")
case "退出" | "esc" | "ESC":
print("→ 退出游戏,游戏结束!")
break
case _:
print("× 指令无效")
# 游戏角色移动控制系统 (用 if...elif...else实现)
# 接收玩家输入,判断指令,输出对应动作
# 1. 获取玩家输入的指令
cmd = input("请输入控制指令(上/下/左/右/跳/攻击/退出 或 w/s/a/d/j/esc等): ")
# 2. 判断指令,执行对应动作
if cmd in ["上", "w", "W"]:
print("角色向上移动")
elif cmd in ["下", "s", "S"]:
print("角色向下移动")
elif cmd in ["左", "a", "A"]:
print("角色向左移动")
elif cmd in ["右", "d", "D"]:
print("角色向右移动")
elif cmd in ["跳", " "]: # 空格直接写一个引号空格
print("角色跳跃")
elif cmd in ["攻击", "j", "J"]:
print("角色发动攻击")
elif cmd in ["退出", "esc", "ESC"]:
print("角色退出游戏")
else:
# 输入不识别的情况
print("输入指令无效,请重新输入!")
# 进阶版(可以一直玩,直到输入退出,更像真实游戏)
# 游戏角色移动控制系统 - 循环版,可一直操作
print("===== 游戏角色控制系统 =====")
print("操作指令:上/下/左/右/跳/攻击/退出")
print("快捷键:w s a d j esc")
print("输入 退出 结束游戏\n")
while True: # 无限循环,直到输入退出
cmd = input("请输入指令:")
if cmd in ["上", "w", "W"]:
print("→ 角色向上移动")
elif cmd in ["下", "s", "S"]:
print("→ 角色向下移动")
elif cmd in ["左", "a", "A"]:
print("→ 角色向左移动")
elif cmd in ["右", "d", "D"]:
print("→ 角色向右移动")
elif cmd in ["跳", " "]:
print("→ 角色跳跃")
elif cmd in ["攻击", "j", "J"]:
print("→ 角色发动攻击")
elif cmd in ["退出", "esc", "ESC"]:
print("→ 角色退出游戏,游戏结束!")
break # 跳出循环,结束程序
else:
print("× 指令无效,重新输入")
**声明:**本篇学习笔记参考黑马程序员相关课程,部分素材来源于网络公开资料及本人补充;文中为个人整理复盘,仅供学习交流使用。