如果'z'中同时包含'x'和'y':

7

我正在使用Python编写一个问答脚本。它获取raw_input并将其设置为theQuestion。我尝试了if 'var1' and 'var2' in theQuestion:,但它只查找其中一个字符串,而不是两个都存在的情况。有没有办法在一个“if”语句中使其工作?(不是“if x: if y: 那么 z”)。


2个回答

18

and 是一个逻辑与运算符,而不是自然语言中的“和”的意思。因此,你的代码被解释为:

'var1' and 'var2' in theQuestion
True   and 'var2' in theQuestion # Since bool('var1') == True
           'var2' in theQuestion
你想用逻辑与连接这两个测试:

你想用逻辑与连接这两个测试:

if 'var1' in theQuestion and 'var2' in theQuestion:

或者,对于大量的测试:

if all(k in theQuestion for k in ('var1', 'var2')):

6
更一般的说法是,如果在问题theQuestion中对于变量集合vars中的每个变量var都成立,那么就满足条件all(var in theQuestion for var in vars)。在这种情况下,vars(var1, var2) - agf
1
@agf也加上了,虽然这更像是一个如何在Python中编写混淆代码的示例。 - phihag
1
如果你不知道有多少个变量,或者有十个变量,你会怎么写它?我认为这是完全可读的。"如果以下所有条件都成立:变量在问题中存在于变量列表中的每个变量中" - agf
@agf,如果测试数量是可变的,使用“all”肯定是正确的选择。但对于仅有两个值的情况来说,这样做有些过度设计,因为你不能像简单版本那样轻松地阅读它。 - phihag
1
同意。这就是为什么我把它作为评论而不是答案发布的原因;你已经做得很对了 :) - agf
使用 all 是一个不错的解决方案,当我们有一个大列表需要测试时。 - igorkf

2
如何考虑以下内容:
if 'x' in z and 'y' in z:
  ... do something ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接