Day03-1 Python 中的 match()---让条件判断不再是长篇大论

在 Python 中,如果我们想要根据不同的条件做出选择,最常见的方法就是使用 if ... elif ... else ... 语句。然而,随着条件越来越多,代码也就变得越来越冗长,读起来既复杂又不方便。那有没有一种更简洁、优雅的方式来做条件匹配呢?当然有!那就是——match 语句!

图片


一、传统的 if...elif...else 判断:长篇大论

比如,我们需要判断一个学生的成绩是 A、B 还是 C。传统的写法可能会这样:

score = 'B'if score == 'A':    print('Score is A.')elif score == 'B':    print('Score is B.')elif score == 'C':    print('Score is C.')else:    print('Invalid score.')

嗯,这段代码没有错,但是如果成绩类别多了呢?比如你要判断 A 到 F 的成绩,岂不是写得越来越长,越来越难看?别急,match 语句来了,它能让代码变得简洁又有条理!


二、Match 语句:简洁清晰的条件匹配

你可以用 match 语句替换上面的 if-elif-else。只要这样写,代码一下子就显得清晰又直观:​​​​​​​

score = 'B'
match score:    case 'A':        print('Score is A.')    case 'B':        print('Score is B.')    case 'C':        print('Score is C.')    case _:        print('Score is ???.')

看吧!用 match 语句,条件分支就像摆在你面前的菜单一样清晰可见!每个 case 语句就像一个小小的“选择框”,你可以明确匹配每种情况。最后的 case _ 表示“其他所有情况”,简直比 else 还要简洁、明了。


三、Match 语句的魔法:复杂匹配

match 语句不止能做简单的匹配,它还可以处理更复杂的情况,比如范围匹配或者多个条件的联合匹配。看看这个例子:​​​​​​​

age = 15
match age:    case x if x < 10:        print(f'Age < 10: {x}')    case 10:        print('Age is 10.')    case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:        print('Age is between 11 and 18.')    case 19:        print('Age is 19.')    case _:        print('Age is unknown.')

这里发生了什么?

  1. case x if x < 10: 表示如果 age 小于 10,那么 x 就是这个小小的数字,打印出来;

  2. case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18: 用 | 符号连接多个值,表示当 age 是这些数之一时就匹配。

这种写法相比 if ... elif 来得更简洁,读起来也不那么复杂了。


四、Match 语句更强大的功能:匹配列表

你以为 match 语句只能匹配简单的数值?错!它还可以用来匹配列表。来看看这个例子:​​​​​​​

args = ['gcc', 'hello.c', 'world.c']
match args:    case ['gcc']:        print('gcc: Missing source file(s).')    case ['gcc', file1, *files]:        print(f'gcc compile: {file1}, ' + ', '.join(files))    case ['clean']:        print('Clean command')    case _:        print('Invalid command.')

这里是怎么回事呢?

  1. case ['gcc']: 表示如果 args 列表只有一个元素 'gcc',就会输出报错信息;

  2. case ['gcc', file1, *files]: 表示 args 列表以 'gcc' 开头,第二个元素绑定到 file1,后面跟着的所有元素都绑定到 files。所以如果命令是 ['gcc', 'hello.c', 'world.c'],就会打印出“gcc compile: hello.c, world.c”;

  3. case ['clean']: 当只有 ['clean'] 这个命令时,执行清理操作;

  4. 最后一个 case _: 捕捉所有其他的情况,确保没有遗漏。

看见没有,match 语句不仅能帮助你快速匹配数值,甚至可以匹配复杂的数据结构,强大得让你忍不住想多写几次!


总结:Match 语句的好处
  1. 可读性强: 和长篇的 if...elif...else 比,match 语句显得更加简洁、易读。你可以清楚地看到每一个条件的匹配。

  2. 灵活性高: match 语句支持多种匹配方式,不仅可以匹配数值、范围,还能匹配列表、元组等复杂类型。

  3. 易于扩展: 如果以后增加了更多的条件,使用 match 语句时无需再写一堆 elif,直接增加新的 case 就好,代码维护更轻松。


动手练习:
  1. 简易天气判断:
    请根据输入的天气类型判断今天适合什么活动。假设天气类型有 "sunny""rainy""snowy""windy" 和 "cloudy",请使用 match 来判断并输出合适的活动。

    例如:

    • "sunny" 适合去跑步

    • "rainy" 适合在家看书

    • "snowy" 适合堆雪人

    • "windy" 适合放风筝

    • "cloudy" 适合散步

  2. 命令解析:
    请根据输入的命令(比如 args = ['ls', '-l'])判断该命令是否是有效的,并根据不同的命令类型(如 lscleangcc)输出相应的提示信息。

快来动手挑战一下吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值