假设我有以下代码:
target = 'abc1234y'
if ('x' and 'y') in target:
print('x and y are in target')
为什么if ('x' and 'y') in target
是真的?
为什么这段代码不会产生错误?
为什么大括号没效果?
这似乎不符合逻辑,因为如果('x' and 'y') = true
然后('y' and 'x')
也应该是真的,那么情况并非如此。
同时,表达式if ('y' and 'x') in target
为false
答案 0 :(得分:4)
这里有两件事需要考虑:
and
如何使用字符串 'x' and 'y'
不是True
。
'x' and 'y'
是'y'
,这可能看起来令人困惑,但在查看and
和or
的工作方式时,这是有道理的:
a and b
,则b
会返回True
,否则会返回a
。a or b
,则a
会返回True
,否则会返回b
。因此:
'x' and 'y'
是'y'
'x' or 'y'
是'x'
括号在if语句中有效。 in
的优先级高于and
,这意味着如果您编写
if 'x' and 'y' in target:
它隐含意味着与
相同if 'x' and ('y' in target):
仅检查y是否在目标字符串中。所以,使用
if ('x' and 'y') in target:
会有效果。您可以在the Python docs about Expressions中看到整个运算符优先级表。
要实现您想要做的事情,@ Prem和@Olga已经提供了两个很好的解决方案:
if 'y' in target and 'x' in target:
或
if all(c in target for c in ['x','y']):
答案 1 :(得分:2)
您似乎对AND
运算符的工作方式感到困惑。
'x' and 'y'
Out[1]: 'y'
和
'y' and 'x'
Out[1]: 'x'
因此,在第一种情况下,您会检查是否存在y
。相反,您检查字符串中是否存在x
。
答案 2 :(得分:0)
因为它正在检查“' y'目标。 你需要这样的东西:
target = 'abc1234y'
if 'y' in target and 'x' in target:
print('x and y are in target')
答案 3 :(得分:0)
您可能希望改用all
if all(c in target for c in ['x','y']):...