Python:match...case语句

一.介绍

该语句可以实现与if...elif...else语句相似的多分支选择的功能。

但是比if...elif...else语句更强大,可以轻松匹配列表、元组、字典、类以及其他更复杂的结构。

通用语法如下:

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case _ :
        <action_wildcard>

解释:

参数说明:

subject:必选参数,用于指定具有特定类型的数据,如数字,字符串,列表,元组等。

<pattern_1>,<pattern_2>:subject参数中的一个值,用于进行模式匹配。

在程序执行中,将从上到下一次进行比较,直到匹配到一个模式后结束匹配

<action_1>,<action_2>:指定要执行的与匹配模式相关联的动作

_和<action_wildcard>:可选参数,用于指定当前面的case语句不能完全匹配时所使用的通配符,该case语句将作为已匹配模式,从而执行 <action_wildcard>所指定的动作。如果不存在该语句,则当前面的case语句不能完全匹配时,该match语句将不执行任何操作

二.代码示例

# match...case 语句
# 匹配字面值
from datetime import datetime
day = datetime.today().weekday()
match day:
    case 0:
        print("今天,星期一,新的一周开始了!")
    case 4:
        print("今天,星期五,工作一天周末了!")
    case 5|6:
        print("今天,是周末!")
    case _ :
        print("今天,普通的工作日!加油~")


# 绑定变量
a = input("请输入一个需要匹配的数字:")
match a:
    case b:
        print("变量b被赋值为",b)

# 输入的坐标数据,其中eval()函数用于将传入的字符串作为表达式执行
point = eval(input("请输入坐标:"))
match point:
    case (0,0):
        print(f"{point}是原点")
    case (0,y):
        print(f"Y轴坐标为:{y}")
    case (x,0):
        print(f"X轴坐标为:{x}")
    case (x,y):
        print(f"X轴坐标为:{x},Y轴坐标为:{y}")

# 使用if语句
x,y = eval(input("请输入一个坐标:"))
if x == 0 and y == 0:
    print(f"({x},{y})是原点")
elif x != 0 and y == 0:
    print(f"X轴坐标为:{x}")
elif x == 0 and y != 0:
    print(f"Y轴坐标为:{y}")
else:
    print(f"X轴坐标为:{x},Y轴坐标为:{y}")

# 约束项
"""
在实现case匹配时,可以添加一个if语句来作为该case的约束项。如果if语句判断成功,则将执行该case语句;
相反,若if语句判断失败,那么该case语句将不会被匹配,并继续寻找下一个case匹配项
"""
point = eval(input("请输入坐标:"))
match point:
    case (x,y) if x > y:
        print(x,y,"x大于y")
    case (x,y) if x < y:
        print(x,y,"x小于y")
    case (x,y):
        print(x,y,"x等于y")


# 匹配字典
d = {1:"alan",2:"andy"}
match d:
    case {1:"alan"}:
        print("匹配成功!")

# 如果想要获取原字典中没有匹配到的键值对的值,可以使用通配符**进行获取
d = {1:"alan",2:"andy",3:"aliy"}
match d:
    case {1:"alan",**remainder}:
        print("匹配成功!" + '\n' + f"该字典中其他键值对为:{remainder}")

# 如果想要匹配键值对的值,可以使用变量进行匹配
d = {1:"alan",2:"andy",3:"aliy"}
match d:
    case {2:a,3:b}:
        print(a,b)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值