为什么Python会判断不存在的子串存在于目标字符串中?
问题根本原因
你编写的条件判断"CORE" or "Core" in product存在逻辑错误,Python中逻辑运算符or的优先级低于成员运算符in,且非空字符串的布尔值默认为True,因此该表达式实际的执行逻辑为:
- 优先判断左侧
"CORE"的布尔值,结果为True - 逻辑或
or属于短路运算符,只要左侧结果为真,就会直接返回真,完全不会执行右侧"Core" in product的判断
因此第一个if分支永远会触发,无论输入的product是什么内容,都会直接返回"CORE",这就是你传入"Casual_Attire"得到错误结果的核心原因。
修复方案
有两种常用的正确写法可供选择:
写法1:补全所有成员判断逻辑
def check_product_group(product: str) -> str: if "CORE" in product or "Core" in product: return "CORE" elif "CASUAL" in product or "Casual" in product: return "CASUAL" else: return ""
写法2:统一大小写后判断(更简洁)
不需要罗列多种大小写格式,统一转换为全大写/全小写后再做子串判断即可:
def check_product_group(product: str) -> str: product_upper = product.upper() if "CORE" in product_upper: return "CORE" elif "CASUAL" in product_upper: return "CASUAL" else: return ""
内容的提问来源于stack exchange,提问作者user3124627
相关产品推荐
相关产品推荐

