3 回答

TA贡献1934条经验 获得超2个赞
这'ten' or '10' in compareName
部分不会给你你想要的结果。每次都会返回“十”!相反,您需要检查“十”是否在 compareName 中,并检查“10”是否在比较名称中,并将 或 放在两者之间,如下所示:
if 'blazer' in compareName and ('ten' in compareName or '10' in compareName):

TA贡献1942条经验 获得超3个赞
您似乎对编程的工作方式有根本的误解。我强烈建议你在继续之前阅读一些比较。
这里的声明:
if 'blazer' in compareName and 'ten' or '10' in compareName:
基本上评估为:
if (('blazer in compareName) == True) and ('ten' == True) or (('10' in compareName) == True):
假设compareName是 'blazerten',它将评估为:
if True and True or False:
# Note: Python evaluates OR before AND operators
# Result: True
看起来不错?不!如果compareName是 'blazer',它将评估相同的东西。因为第二个条件'ten'总是评估为,True因为它不是一个空字符串,所以一旦你满足第一个条件,第二个和第三个条件就没有实际意义了。
正确的方法是提到的其他答案,您需要分别进行比较:
if 'blazer' in compareName and
'ten' in compareName or
'10' in compareName:
注意:如果您尊重操作优先级,则不需要括号。
如果你觉得有点冒险,又不想重复太多,你可以尝试用列表理解来表达:
if 'blazer' in compareName and
any([part in compareName for part in ['ten', '10']]):
第二个条件现在由any()函数处理。当然,需要注意的是,您放弃了一点可读性。优势虽然是如果你需要比较多只'ten',并'10'在OR子句中,你可以简单地添加到第二个条件的名单。

TA贡献1841条经验 获得超3个赞
我相信有更好的方法可以做到这一点,但要简单地维护您的语法并给出正确的答案,您的if语句应该是
if 'blazer' in compareName and ('ten' in compareName or '10' in compareName):
func()
else:
pass
添加回答
举报