Python match-case语句
困难0用 match-case 让多分支选择更清晰
在编写程序时,我们经常需要根据一个变量的值,从多个选项中挑一个来执行。比如按数字键选择游戏模式、根据分数判断等级。Python 3.10 版本新增了 match-case 语句,它就像遥控器上的多个功能按钮——按1开电视,按2开空调,清晰又简单。
一、match-case 的基本用法
match-case 的写法很像开关选择:先写 match 变量,然后用 case 值: 列出每一种可能的情况。如果变量的值等于某个 case 后面的值,就执行那个 case 下面的代码。
举个例子,根据用户输入的数字(1~7)输出对应的星期几:
# 输入数字,判断星期几
day = int(input("请输入数字(1-7):"))
match day:
case 1:
print("星期一")
case 2:
print("星期二")
case 3:
print("星期三")
case 4:
print("星期四")
case 5:
print("星期五")
case 6:
print("星期六")
case 7:
print("星期日")
case _: # 通配符 _ 表示“其他任何值”
print("输入错误,请输入1-7的数字")
match day:告诉 Python 我们要检查变量day的值。case 1::如果day等于 1,就执行下面的print("星期一")。- 最后一个
case _:中的下划线_是一个特殊的通配符,它匹配任何没有在前面被列出的值。这有点像遥控器上“其他”按钮,防止用户输入了非预期的数字。
这样写比用一连串的 if-elif 更直观,就像看菜单一样,每个选项都一目了然。
二、生活中的应用场景
场景1:按按钮选择游戏模式
小明有一台游戏机,按1进入冒险模式,按2进入竞赛模式,按3进入练习模式,按其他数字提示重新选择。用 match-case 可以这样写:
# 选择游戏模式
mode = int(input("请输入模式编号(1-冒险,2-竞赛,3-练习):"))
match mode:
case 1:
print("进入冒险模式,准备好打怪升级吧!")
case 2:
print("进入竞赛模式,和电脑比赛谁更快!")
case 3:
print("进入练习模式,先练练手吧。")
case _:
print("没有这个模式,请重新输入1~3。")
场景2:根据考试成绩评等级
考试分数通常分成“优、良、中、差”。如果用 if-elif 要写很多条件,而用 match-case 配合 |(竖线)可以匹配多个值:
# 根据分数输出等级
score = int(input("请输入你的分数(0-100):"))
match score:
case 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100:
print("优秀!真棒!")
case 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89:
print("良好,继续加油哦。")
case 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74:
print("及格,还需要努力!")
case _:
print("不及格,下次要加油!")
这里 case 90 | 91 | 92 | ... | 100: 表示如果分数等于其中任何一个数,就执行对应的代码。| 就像“或”的意思。不过这样写有点长,更好的办法是用 if 判断区间,但 match-case 对于精确值的匹配非常方便。
三、常见错误与注意事项
-
忘记写冒号
case 1:末尾的冒号不能丢,否则会报语法错误。case 1 # 错误!少了冒号 print("星期一") -
缩进错误
case下面的代码必须缩进(通常是4个空格)。如果缩进不一致,Python 会报错或执行不符合预期。match day: case 1: print("星期一") # 错误!print应该再缩进一层 -
多个 case 的顺序
match会从上到下依次检查case,一旦匹配就不再检查后面的。因此要把更具体的条件放前面,更通用的(比如case _)放最后。 -
误用逗号代替
|
如果想匹配多个值,不能用逗号分隔,必须用|(竖线)。比如:case 1, 2: # 错误!这会把1,2当作一个元组去匹配 print("数字1或2")正确写法:
case 1 | 2: print("数字1或2") -
忘记
case _处理其他情况
如果不写case _,当用户输入不存在的值(比如8),程序会执行完match后什么也不做,不会提示错误。通常建议加一个兜底的case _来处理意外输入。
四、完整可运行示例:点餐系统
下面是一个模拟餐厅点餐的程序,用户输入数字选择套餐,程序输出对应的菜品介绍。你可以复制到 Python 3.10+ 环境运行。
# 餐厅点餐系统
print("欢迎来到快乐餐厅!请选择套餐:")
print("1 - 汉堡套餐")
print("2 - 鸡腿套餐")
print("3 - 披萨套餐")
print("4 - 全家桶")
# 获取用户选择的数字
choice = int(input("请输入数字(1-4):"))
match choice:
case 1:
print("你选择了汉堡套餐,包含汉堡+薯条+可乐。")
case 2:
print("你选择了鸡腿套餐,包含香辣鸡腿+饮料+沙拉。")
case 3:
print("你选择了披萨套餐,包含9寸披萨+一杯果汁。")
case 4:
print("你选择了全家桶,里面有一整只炸鸡、鸡翅、薯条和汽水。")
case _:
print("没有这个选项,请重新输入1~4。")
运行一下,输入1试试看吧!
五、相关知识点指引
- if-elif-else 语句:
match-case可以代替许多if-elif,但条件判断(比如判断范围)用if更方便。了解两者的区别和适用场景。 - 模式匹配(高级):
match-case还支持匹配列表、元组、字典等复杂结构,比如case [x, y]:匹配两个元素的列表。这个在 CSP-J 中不常考,但以后用 Python 写算法时会遇到。 - 循环与选择嵌套:可以在
case里面再嵌套if或match,实现更精细的控制。
如果你已经掌握了 match-case,可以继续学习循环语句(for、while)和函数的定义,让程序更强大。
小提示:
match-case只能在 Python 3.10 及以上版本中使用。如果你用记事本或在线编译器,请确认版本。老版本的 Python 只能使用if-elif哦!
例题精讲
下列关于Python中match-case语句的说法,错误的是?
执行以下代码后,输出结果为? value = 3 match value: case 1: print("one") case 2: print("two") case _: print("other")
在match-case语句中,可以使用字面量(如数字、字符串)直接作为匹配模式。
以下代码使用match-case语句根据数字1~7输出对应星期几的中文名称,其中1对应“周一”,2对应“周二”,以此类推,其他数字输出“无效”。请补全代码。
day = 5
match day:
case 1:
print("周一")
case 2:
print("周二")
case 3:
print("周三")
case 4:
print("周四")
case 5:
print("周五")
case 6:
print("周六")
case 7:
print("周日")
case ___:
print("无效")以下程序片段使用match-case判断用户输入的命令(字符串),若为"quit"则退出程序(用exit()),若为"help"则打印帮助信息,否则打印"未知命令"。补全代码。
command = input()
match ___:
case "quit":
exit()
case "help":
print("帮助信息...")
case _:
print("未知命令")