为什么python会忽略条件的第一部分?

2021-10-17 18:00:06 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下代码:

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 targetfalse

3条回答
网友
1楼 ·

这里要考虑两件事:

and如何处理字符串

'x' and 'y'不是True。你知道吗

'x' and 'y''y',这看起来可能很混乱,但在研究andor的一般工作方式时,它是有意义的:

  • a and b返回b如果a是True,else返回a。你知道吗
  • a or b返回a如果a是True,else返回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']):
网友
2楼 ·

您似乎混淆了AND操作符的工作原理。你知道吗

'x' and 'y'
Out[1]: 'y'

以及

'y' and 'x'
Out[1]: 'x'

所以在第一个例子中,您需要检查y是否存在。反过来,检查字符串中是否存在x。你知道吗

网友
3楼 ·

因为它只检查目标中的“y”。 你需要这样的东西:

target = 'abc1234y'
if 'y' in target and 'x' in target:
    print('x and y are in target')

相关问题