如何让Python的match case语句实现大小写不敏感匹配?
实现Python match-case的大小写不敏感匹配
方案1:统一转换输入为小写(最直接)
把输入字符串转成小写,同时将case分支里的匹配值也改成小写,就能消除大小写差异导致的匹配失败问题。
fruits = input("Enter fruit: ").lower() match fruits: case "apple": print("Calories: ", 130) case "avocado": print("Calories: ", 50) case "banana": print("Calories: ", 110) case "cantaloupe": print("Calories :", 50)
你之前的问题应该是只转换了输入的大小写,但没修改case分支里的字符串,导致小写的输入和大写的匹配值无法对应,所以运行异常。统一两边的大小写即可解决。
方案2:使用match-case的守卫条件(保留原输入格式)
如果需要保留用户输入的原始格式,不想修改输入字符串,可以在case分支中添加守卫条件,通过if判断实现大小写不敏感匹配。
fruits = input("Enter fruit: ") match fruits: case fruit if fruit.lower() == "Apple".lower(): print("Calories: ", 130) case fruit if fruit.lower() == "Avocado".lower(): print("Calories: ", 50) case fruit if fruit.lower() == "Banana".lower(): print("Calories: ", 110) case fruit if fruit.lower() == "Cantaloupe".lower(): print("Calories :", 50)
守卫条件会先将输入和目标值都转为小写后再比较,满足条件才执行对应分支,既能实现匹配需求,又能保留输入的原始大小写。
方案3:用字典映射替代match-case(更适合批量维护)
如果后续需要添加更多水果数据,用字典维护热量信息会更高效,同样支持大小写不敏感匹配:
fruit_calories = { "apple": 130, "avocado": 50, "banana": 110, "cantaloupe": 50 } fruits = input("Enter fruit: ").lower() if fruits in fruit_calories: print(f"Calories: {fruit_calories[fruits]}") else: print("Fruit not found")
这种方式代码更简洁,后续新增水果只需在字典中添加键值对即可,无需修改分支逻辑。
内容的提问来源于stack exchange,提问作者Ephraim
相关产品推荐
相关产品推荐

