“如果a和b或a和c”的Python语法,其中a、b和c是句子中的单词

“如果a和b或a和c”的Python语法,其中a、b和c是句子中的单词,python,python-3.x,if-statement,operators,Python,Python 3.x,If Statement,Operators,我有一个python脚本,我应该检查两个单词是否出现在用破折号分隔的句子中 test_dash_sentence="wordtest-wordtest-word3-word4" if ("word1" and "word2") or ("word1" and "word3") in test_dash_sentence: print("FOUND") else:

我有一个python脚本,我应该检查两个单词是否出现在用破折号分隔的句子中

test_dash_sentence="wordtest-wordtest-word3-word4"

if ("word1" and "word2") or ("word1" and "word3") in test_dash_sentence:
    print("FOUND")
else:
    print("NOT FOUND")
我遇到的问题是,即使word1不存在,也会返回“已找到”,因此它应该返回“未找到”


我用简单的引号尝试了不同的模式,没有括号,如果我只在句子中查找一个单词,它似乎是有效的,但当我查找两个单词时,它不起作用。

问题是你假设and和or语法在后面被聚合到in,但这不是真的。。。 如果语句在test_dash_语句中被转换为True,那么您将看到:因为该语句正在将字符串转换为boolean。。详情如下:

if ("word1" and "word2") or ("word1" and "word3"):
   print(True):
else:
   print(False)
>>> True
解决方案:

只要改变一下:

if ("word1" and "word2") or ("word1" and "word3") in test_dash_sentence:
致:

编辑:正如下面@johnnymapp所评论的,您也可以将语句缩短,以便:

if ("word1" in test_dash_sentence) and ("word2" in test_dash_sentence or  "word3" in test_dash_sentence) :
通过请求进行更多解释


python不支持mylist中element1和element2的语法,in关键字一次只能应用于一个元素,因此您必须在list中执行element1,在mylist中执行element2,python将element1和element2视为单独的语句,将其求值为boolean,然后检查结果boolean是否存在于mylist中。

问题是您假设and和or语法与后面的语法组合在一起,但这不是真的。。。 如果语句在test_dash_语句中被转换为True,那么您将看到:因为该语句正在将字符串转换为boolean。。详情如下:

if ("word1" and "word2") or ("word1" and "word3"):
   print(True):
else:
   print(False)
>>> True
解决方案:

只要改变一下:

if ("word1" and "word2") or ("word1" and "word3") in test_dash_sentence:
致:

编辑:正如下面@johnnymapp所评论的,您也可以将语句缩短,以便:

if ("word1" in test_dash_sentence) and ("word2" in test_dash_sentence or  "word3" in test_dash_sentence) :
通过请求进行更多解释


python不支持mylist中element1和element2的语法,in关键字一次只能应用于一个元素,因此您必须在list中执行element1,在mylist中执行element2,python将element1和element2视为单独的语句,将其求值为布尔值,然后检查结果布尔值是否存在于mylist中。

您的布尔值条件不正确。此外,word1在您的情况下是两倍的,因此您可以将它们组合在一起:

test_dash_sentence="wordtest-wordtest-word2-word3"

if "word1" in test_dash_sentence and ("word2" in test_dash_sentence or "word3" in test_dash_sentence):
    print("FOUND")
else:
    print("NOT FOUND")

您的布尔条件不正确。此外,word1在您的情况下是两倍的,因此您可以将它们组合在一起:

test_dash_sentence="wordtest-wordtest-word2-word3"

if "word1" in test_dash_sentence and ("word2" in test_dash_sentence or "word3" in test_dash_sentence):
    print("FOUND")
else:
    print("NOT FOUND")
你必须对每个单词重复测试句子,两个分句中的单词1都要简化,这样你就得到了答案

if "word1" in test_dash_sentence and ("word2" in test_dash_sentence or "word3" in test_dash_sentence):
您也可以使用all/any

对于多个可能需要的单词,每个单词的可选单词必须匹配,您可以使用dict来存储,然后使用2级存储

你必须对每个单词重复测试句子,两个分句中的单词1都要简化,这样你就得到了答案

if "word1" in test_dash_sentence and ("word2" in test_dash_sentence or "word3" in test_dash_sentence):
您也可以使用all/any

对于多个可能需要的单词,每个单词的可选单词必须匹配,您可以使用dict来存储,然后使用2级存储


由于测试破折号句子中有两个单词1,您可以组合并缩短。请注意,如果测试破折号句子中的单词1和单词2或单词1和单词3的计算结果为True和True,或。。。评估结果为真的谢谢大家的评论。。!感谢@adirabargil提供的详细信息,我向您投了1票,您的答案解决了主要问题,但我担心将其应用于大量数据会使其难以读取和维护如果您演示数据如何扩展,我们可以找到一种更具可读性和通用性的方法,但是对于你现在的例子,我已经尽力了。。。我认为这是一个恰当的答案。。。无论如何,如果条件满足,@azro answer可能会满足您的需要…因为测试破折号句子中有两次单词1,您可以组合并缩短。请注意,如果测试破折号句子中的单词1和单词2或单词1和单词3的计算结果为True和True,或者。。。评估结果为真的谢谢大家的评论。。!感谢@adirabargil提供的详细信息,我向您投了1票,您的答案解决了主要问题,但我担心将其应用于大量数据会使其难以读取和维护如果您演示数据如何扩展,我们可以找到一种更具可读性和通用性的方法,但是对于你现在的例子,我已经尽力了。。。我认为这是一个恰当的答案。。。无论如何,@azro answer可能会满足您的需求,如果条件满足……这是否回答了您的问题@PM77-1不完全是,因为在你的链接中,他们在字符串中查找a或b或c,我查找a和b或a和c,这能回答你的问题吗@PM77-1不完全是,因为在你的链接中,他们在字符串中查找a或b或c,而我查找a和b或a和c。对不起,你能解释一下你的第二部分中出现了什么吗?我觉得很有趣confusing@Ced这是一个局部函数,表示数组中的单词,无论是必需的还是任意的,它用于测试破折号句子中的测试w。谢谢澄清,您将如何安排第二部分,以执行相同的操作,但需要大量的
例如,假设我有3个必填词,每个必填词都有4个可选词,对应于各自的必填词words@Ced我已经编辑了我的博文谢谢,但是在你使用的“必需”和“任何”编辑中,虽然只有一个名为“单词”的dict,所以我不知道它是如何工作的,但我遗漏了什么吗?对不起,你能解释一下你的第二部分是什么吗?我觉得很有趣confusing@Ced这是一个局部函数,表示数组中的单词,无论是必需的还是任意的,它用于测试破折号句子中的测试w。谢谢你的澄清,你如何安排第二部分,做同样的事情,但是对于很多数据,比如说我有3个必需的单词,它们中的每一个都有各自的4个可选单词,对应于各自所需的单词words@Ced我已经编辑了我的博文谢谢,但是在您使用的“必需”和“任何”编辑中,虽然只有一个名为“单词”的dict,所以我不知道它是如何工作的,我是否遗漏了什么?谢谢您的回答,欢迎来到StackOverflow!如果这个问题与您相关,请毫不犹豫地向上投票谢谢您的回答,欢迎来到StackOverflow!如果这个问题与您相关,请毫不犹豫地向上投票