做淘客网站怎么建要购买数据库吗,徐州网站建设 徐州网站推广,网站空间计算,做网站路径前言
本文主要介绍match-case语句与switch-case的区别#xff0c;及match-case语句的基本用法。 文章目录 前言一、switch-case 和match-case的区别二、match-case的基本用法1、可匹配的数据类型2、多条件匹配3、通配符匹配 一、switch-case 和match-case的区别
C语言里面s…前言
本文主要介绍match-case语句与switch-case的区别及match-case语句的基本用法。 文章目录 前言一、switch-case 和match-case的区别二、match-case的基本用法1、可匹配的数据类型2、多条件匹配3、通配符匹配 一、switch-case 和match-case的区别
C语言里面switch-case所匹配的变量类型只能是整数型或者字符型而Python里的match-case数据类型对象类型丰富多彩可以是整数、浮点数、字符串、元组、列表、字典。 C语言中一个典型的swicht-case语句像下面这样在switch里包含要判断的变量xcase语句后则是匹配变量值是多少如果满足这个匹配条件就执行“case n:”后面的语句直到遇到break退出swith语句。
#include stdio.hint main() {int x;printf(输入数值: );scanf(%d, x);switch(x) {case 1:printf(星期一\n);break;case 2:printf(星期二\n);break;case 3:printf(星期三\n);break;case 4:printf(星期四\n);break;case 5:printf(星期五\n);break;case 6:printf(星期六\n);break;case 7:printf(星期天\n);break;default:printf(输入错误\n);break;}return 0;
}输出结果
4 星期一在Python3.10里面类似的功能可以用match-case语句实现
x int(input(输入数值: ))
match x: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
星期天
输入数值: 10
输入错误match类似C语言的switch关键字后面跟要匹配的变量case跟各种不同的条件其后面是满足某一条件要执行的语句每个case语句结束时不需要break语句。
最后一个case加下划线表示缺省匹配如果前面的条件没有匹配上就跑到这个case里面执行类似于C语言的default缺省匹配不可以放置在其他case语句前否则会报SyntaxError错误: wildcard makes remaining patterns unreachable。当然缺省匹配并不是必须的加一个缺省匹配可以让程序运行的结果更有可读性。
二、match-case的基本用法
1、可匹配的数据类型
1匹配对象类型为字符串类型 不像C语言里面switch所匹配的变量类型只能是整数型或者字符型Python里的匹配对象类型可以用字符串类型
x input(输入英文简写: )
match x:case mon:print(星期一)case tue:print(星期二)case wed:print(星期三)case thur:print(星期四)case fri:print(星期五)case sat:print(星期六)case sun:print(星期天)case _:print(输入错误)输出结果
输入英文简写: sun #这里是每次输入只能输出一个结果为了排版写在了一起
星期天
输入英文简写: none
输入错误2匹配对象类型为浮点型 如果一定要用浮点型来做匹配那也是可以的下面这个例子中要匹配的变量x为整型case后的值为整型或浮点型
x int(input(输入数值: ))
match x:case 1:print(星期一)case 2:print(星期二)case 3.0:print(星期三)case 4.0:print(星期四)case 5.0:print(星期五)case 6.0:print(星期六)case 7.0:print(星期天)case _:print(输入错误)输出结果
输入数值: 1 #这里是每次输入只能输出一个结果为了排版写在了一起
星期一
输入数值: 3
星期三
输入数值: 9
输入错误还可以这样要匹配的变量x为浮点型case后的值为整数型或浮点型
x float(input(输入数值: ))
match x:case 1:print(星期一)case 2:print(星期二)case 3:print(星期三)case 4:print(星期四)case 5.5:print(星期五)case 6:print(星期六)case 7.0:print(星期天)case _:print(输入错误)输出结果
输入数值: 1 #这里是每次输入只能输出一个结果为了排版写在了一起
星期一
输入数值: 1.0
星期一
输入数值: 5 #要匹配的变量为5.5才是星期五这里的5匹配到了缺省匹配所以是输入错误
输入错误
输入数值: 5.5
星期五
输入数值: 7.2
输入错误从上面的例子可以看出些端倪match后的变量类型和case后的类型并不一定要相同。 3概括匹配类型为可以是整数、浮点数、字符串、元组、列表、字典 下面设计的这个实验就是通过输入不同的数值模拟函数返回不同的数据类型让match后的变量类型都不一样在case里如果有一种能匹配上就输出相应的打印
def func():x int(input(输入数值: ))if x1:return 1.0elif x2:return 2elif x3:return (3,0,1)elif x4:return [4,0,0]elif x5:return {5:k,A:1}elif x6:return 6elif x7:return set((7,))else:return xxfunc()
print(type(x))
match x:case 1.0:print(星期一)case 2:print(星期二)case (3,0,1):print(星期三)case [4,0,0]:print(星期四)case {5:k,A:1}:print(星期五)case 6:print(星期六)case set((7,)):print(星期天)输出结果
输入数值: 0 #这里是每次输入只能输出一个结果为了排版写在了一起
class int
输入错误
输入数值: 1
class float
星期一
输入数值: 2
class str
星期二
输入数值: 3
class tuple
星期三
输入数值: 4
class list
星期四
输入数值: 5
class dict
星期五
输入数值: 6
class int
星期六
输入数值: 7
class set
输入错误从上面的例子可以看到Python里的match-case数据类型对象类型丰富多彩可以是整数、浮点数、字符串、元组、列表、字典但是对于set类型即使看起来值是一样的却没有匹配成功。
2、多条件匹配
我们知道在C语言里面如果要匹配多条件可以将case语句并列书写且其后面不带break语句比如下面这个例子输入15匹配工作日输入67匹配周末我们知道在C语言里面如果要匹配多条件可以将case语句并列书写且其后面不带break语句比如下面这个例子输入1~ 5匹配工作日输入6~ 7匹配周末 switch(x){case 1: case 2: case 3:case 4:case 5: printf(工作日\n); break;case 6: case 7: printf(周末\n); break;default:printf(输入错误\n); break;}当x为1,2,3,4,5中任何一个时都能匹配上printf(“工作日\n”)从而实现多条件的匹配。 我们来看下Python里是不是也可以这么实现多条件的匹配
x int(input(输入数值: ))
match x:
case 1:
case 2:
case 3:
case 4:
case 5:print(工作日)
case 6:
case 7:print(周末)
case _:print(输入错误)输出结果 File D:\pythonCode\main.py, line 5case 2:^
IndentationError: expected an indented block after case statement on line 4Process finished with exit code 1不好意思提示IndentationError错误啦在Python里是不可以这么写的 Python的match-case语句要用逻辑或符号|表示多条件的匹配case condition1 | condition2 | condition3 |……
x int(input(输入数值: ))
match x:case 1 | 2 | 3 | 4 | 5:print(工作日)case 6 | 7:print(周末)case _:print(输入错误)输出结果
输入数值: 1 #这里是每次输入只能输出一个结果为了排版写在了一起
工作日
输入数值: 5
工作日
输入数值: 6
周末
输入数值: 7
周末
输入数值: 8
输入错误注意不要使用or代替逻辑或符号否则会提示SyntaxError错误 File D:\pythonCode\main.py, line 3case 1 or 2 or 3 or 4 or 5:^^
SyntaxError: invalid syntaxProcess finished with exit code 13、通配符匹配
1匹配对象为单星号通配符 match-case语句还支持通配符匹配可以使用类似于match x:case [cond1,cond2,.……,*rem]的通配符匹配只要列表或者元组的前几个元素的值和顺序满足cond1,cond2,.……,剩余的元素不管有多少个都能达到匹配条件并且rem表示剩余的元素组成的列表。这里的条件不一定像cond1,cond2,……这样有多个也可以只有一个cond1。下面这个例子输入不同的值返回不同长度的列表匹配条件为[1,*rem]只要被匹配对象第0个元素为1就能匹配上
def func():x int(input(输入数值: ))if x0: return [0,1]elif x1: return [1]elif x2: return [1,2]elif x3: return [1,2,3]else: return None
xfunc()
print(x:,x)
match x:case [1,*rem]:print(rem:,rem) case _:print(未匹配)输出结果
输入数值: 0 #这里是每次输入只能输出一个结果为了排版写在了一起
x: [0, 1]
未匹配 ###### x的第0个元素为0不符合匹配条件中第0个元素为1的要求输入数值: 1
x: [1]
rem: [] ###### x的第0个元素为1满足匹配条件因为只有1个元素所以rem为空
输入数值: 2
x: [1, 2]
rem: [2] ###### x的第0个元素为1满足匹配条件rem为剩余的元素组成的列表
输入数值: 3
x: [1, 2, 3]
rem: [2, 3]
输入数值: 5
x: None
未匹配 ###### x值为None不能匹配tuple也可以用通配符匹配我们将上面的例子x改成tuple类型case匹配对象也是tuple类型其他的条件不变可以看到匹配的方式和list类型是一样的但是需要注意的是如果能匹配上rem得到的仍然是一个list类型而不是tuple类型
def func():x int(input(输入数值: ))if x0: return (0,1)elif x1: return (1,)elif x2: return (1,2)elif x3: return (1,2,3)else: return None
xfunc()
print(x:,x)
match x:case (1,*rem):print(type(rem),rem:,rem) case _:print(未匹配)输出结果
输入数值: 3 #这里是每次输入只能输出一个结果为了排版写在了一起
x: (1, 2, 3)
class list rem: [2, 3] ###虽然匹配对象为tuplerem得到的仍然是list
输入数值: 1
x: (1,)
class list rem: []2匹配对象为双星通配符 双星号通配符可以用于字典的部分键-值匹配比如下面这个例子中case匹配的对象只要有一对键-值为 {2: “星期二”} 就能匹配上并且可以得到rem的值为剩余的键-值。
def func():x int(input(输入数值: ))if x0: return {1: 星期一}elif x1: return {2: 星期二}elif x2: return {1: 星期一, 2: 星期二}elif x3: return {1: 星期一, 2: 星期二,3:星期三}else: return None
xfunc()
print(x:,x)
match x:case {2: 星期二, **rem}:print(rem:,rem)case _:print(未匹配)输出结果
输入数值: 0 #这里是每次输入只能输出一个结果为了排版写在了一起
x: {1: 星期一}
未匹配 ######没有包含{2: 星期二}所以没有匹配上
输入数值: 1
x: {2: 星期二}
rem: {} #####能匹配上且rem为一个空字典{}
输入数值: 2
x: {1: 星期一, 2: 星期二}
rem: {1: 星期一} ##### 去除其中的键-值{2: 星期二}剩余的键-值{1: 星期一}赋给了rem
输入数值: 3
x: {1: 星期一, 2: 星期二, 3: 星期三}
rem: {1: 星期一, 3: 星期三}
输入数值: 10
x: None
未匹配 ##### x值为None不能匹配