我试图创建并应用一个函数,根据给定单元格中单词的词干版本将一些数据组合在一起。
以下是我的相关代码:
if "fee" in match and (
"accredit" or
"admin" or
"administr" or
"design" or
"invest" or
"one-tim") in match:
return "Add-on fees"由于某些原因,我很难理解,这段代码包含不足,只生成值为"fee“和"accredit”的单元格,而不是"fee“和其他任何一个。
如果我移除第一个in match并将代码作为
if "fee" and (
"accredit" or
"admin" or
"administr" or
"design" or
"invest" or
"one-tim") in match:
return "Add-on fees"它只给了我包括“授权”的结果,不管它们是否包含“费用”。
我能够搜索的关于如何嵌套逻辑运算符的所有内容都更多地关注按位运算符,而不是布尔型运算符。
如能提供任何帮助,将不胜感激!
发布于 2022-06-07 16:40:40
这不是and和or的工作方式,它们的工作方式更像
#X and Y
def and(X,Y):
if bool(X):
return Y
else:
return X
# X or Y
def or(X,Y):
if bool(X):
return X
else:
return Y你想要的是
if "fee" in match and any(word in match for word in ("accredit", "admin", "administr", "design", "invest", "one-tim")):
return "Add-on fees"发布于 2022-06-07 16:30:00
避免在字符串中使用or,除非您确定发生了什么。在您的示例中,"accredit" or "admin" or "administr" or "design" or "invest" or "one-tim"将始终计算为'accredit'。本质上,你是在检查"fee" in match and "accredit" in match。试一试如下:
arr = ["accredit", "admin", "administr", "design", "invest", "one-tim"]
match = ["fee", "design"]
("fee" in match) and any(x in match for x in arr)
# True发布于 2022-06-07 16:30:39
您发现的问题是括号中的单词正在计算到第一个单词的值。
为了提高代码的可读性,我将其更改为:
if ("fee" in match) and do_other_checks(match):
return "Add-on fee"
def do_other_checks(match):
for word in [
'accredit',
'admin',
'administr',
'design',
'invest',
'one-tim',
]:
if word in match:
return True
return Falsehttps://stackoverflow.com/questions/72534548
复制相似问题