Python 3.10中如何在match-case结构中获取包含空格的终端命令参数
解决带空格的命令参数匹配问题
你遇到的问题根源在于user.split()默认会把所有空白字符都作为分隔符,把输入拆分成多个元素。当你的参数包含空格时,split()得到的列表长度就会超过2,自然匹配不上case ["cesar", mot]这个分支。
这里有两种简单的解决方案,都能完美解决你的问题:
方案一:使用split(maxsplit=1)限制分割次数
通过给split()传入maxsplit=1参数,我们只对输入做一次分割——把第一个空格前的内容作为命令,剩下的所有内容(包括后续的空格)作为完整参数。修改后的代码如下:
user_input = input("->") parts = user_input.split(maxsplit=1) match parts: case ["cesar", mot]: cesar(mot) # 这里mot会包含"cesar"之后的所有文本,包括空格 case ["cesar"]: print("请输入要加密/解密的文本哦!") # 处理只输入"cesar"的情况 case _: print("你的输入不正确")
方案二:使用partition()拆分命令和参数
str.partition()方法会把字符串按指定分隔符拆成三个部分:分隔符前的内容、分隔符本身、分隔符后的内容。我们可以利用它直接提取命令和完整参数:
user_input = input("->") command, _, mot = user_input.partition(" ") match command: case "cesar": if mot: cesar(mot) else: print("缺少要处理的文本,请补充输入!") case _: print("你的输入不正确")
两种方案都能确保mot变量拿到"cesar"之后的所有内容,不管里面有多少空格。你可以根据自己的习惯选择其中一种~
内容的提问来源于stack exchange,提问作者BerretMan




