为什么python会忽略条件的第一部分?
假设我有以下代码:为什么python会忽略条件的第一部分?,python,logical-operators,Python,Logical Operators,假设我有以下代码: target = 'abc1234y' if ('x' and 'y') in target: print('x and y are in target') 为什么目标中的if('x'和'y')为真 为什么这段代码不产生错误 为什么牙套没有效果 这似乎不符合逻辑,因为如果('x'和'y')=true,那么('y'和'x')也应该为true,但事实并非如此 同时,如果目标中的表达式('y'和'x')为假,您似乎混淆了和运算符的工作原理 'x' and 'y' Out[
target = 'abc1234y'
if ('x' and 'y') in target:
print('x and y are in target')
为什么目标中的if('x'和'y')为真
为什么这段代码不产生错误
为什么牙套没有效果
这似乎不符合逻辑,因为如果('x'和'y')=true
,那么('y'和'x')
也应该为true,但事实并非如此
同时,如果目标
中的表达式('y'和'x')为假,您似乎混淆了和
运算符的工作原理
'x' and 'y'
Out[1]: 'y'
及
因此,在第一种情况下,您需要检查是否存在
y
。相反,检查字符串中是否存在x
。您似乎混淆了和
运算符的工作方式
'x' and 'y'
Out[1]: 'y'
及
因此,在第一种情况下,您需要检查是否存在
y
。反过来,您检查是否在字符串中存在“代码> x/CODE”。 这里有两件事要考虑:
和
如何处理字符串
'x'和'y'
不是True
'x'和'y'
是'y'
,这看起来可能会让人困惑,但从总体上看和和或的工作原理是有道理的:
a和b
返回b
如果a为True
,否则返回a
a或b
返回a
如果a为True
,否则返回b
因此:
'x'和'y'是'y'
'x'或'y'是'x'
括号的作用是什么
括号在if语句中确实有作用<
中的code>的优先级高于,
意味着如果您编写
if 'x' and 'y' in target:
它的含蓄含义与
if 'x' and ('y' in target):
它将只检查y是否在目标字符串中。所以,使用
if ('x' and 'y') in target:
会有效果的。您可以在中看到整个运算符先例表
解决方案
为了实现您想要做的事情,@Prem和@Olga已经给出了两个很好的解决方案:
if 'y' in target and 'x' in target:
或
这里有两件事要考虑:
和
如何处理字符串
'x'和'y'
不是True
'x'和'y'
是'y'
,这看起来可能会让人困惑,但从总体上看和和或的工作原理是有道理的:
a和b
返回b
如果a为True
,否则返回a
a或b
返回a
如果a为True
,否则返回b
因此:
'x'和'y'是'y'
'x'或'y'是'x'
括号的作用是什么
括号在if语句中确实有作用<
中的code>的优先级高于,
意味着如果您编写
if 'x' and 'y' in target:
它的含蓄含义与
if 'x' and ('y' in target):
它将只检查y是否在目标字符串中。所以,使用
if ('x' and 'y') in target:
会有效果的。您可以在中看到整个运算符先例表
解决方案
为了实现您想要做的事情,@Prem和@Olga已经给出了两个很好的解决方案:
if 'y' in target and 'x' in target:
或
因为它只检查目标中的“y”。
你需要这样的东西:
target = 'abc1234y'
if 'y' in target and 'x' in target:
print('x and y are in target')
因为它只检查目标中的“y”。
你需要这样的东西:
target = 'abc1234y'
if 'y' in target and 'x' in target:
print('x and y are in target')
您可能想改用all
如果全部(目标中的c代表['x','y']):。。。
您可能希望改用all
如果全部(目标中的c代表['x','y']):。。。
为什么它会忽略大括号呢?@0rt它不会忽略大括号,('x'和'y')
是'y'
所以你的语句所做的就是目标中的'y'
大括号说,应该先评估条件。也许你想测试“如果目标中的'x'和目标中的'y'”.我想了解“x”和“y”的行为。它是一个已知的和被通缉的行为还是仅仅考虑了一些副作用?为什么它忽略了括号?@它不忽略括号,<代码>(‘x’和‘y’)< /> >是代码> y′/代码>,所以你的所有语句在目标
中都是<代码> 'y '。括号表示,条件应该首先被评估。也许你想测试一下。“如果目标中的“x”和目标中的“y”“。我想了解‘x’和‘y’的行为。这是一个已知的和被通缉的行为还是仅仅考虑一些副作用?我同意下层投票只是随机的。答案看起来是正确的。我不确定答案有什么问题。我对python中关于行为的精彩解释投了赞成票。因此,在python中,&?@0rt和
以及&
的行为与python中的行为完全不同<代码>和
是合乎逻辑的,和
是一点一滴的。你能解释一下为什么大括号对表达没有影响吗?我同意反对票只是随机的。答案看起来是正确的。我不确定答案有什么问题。我对python中关于行为的精彩解释投了赞成票。因此,在python中,&?@0rt和
以及&
的行为与python中的行为完全不同<代码>和
是合乎逻辑的,和
是一点一滴的。你能解释一下大括号为什么对表达式没有影响吗?大括号为什么没有影响是什么意思?。是的。区别在于目标中的('x'和'y')和目标中的'x'和('y')
。他们非常不同!你能用语言解释一下你想比较什么吗?因为它不是“x和y在目标字符串中”大括号没有效果意味着我期望('x'和'y')意味着“x”和'y'不是某处的x和'y'@0rt不幸的是编程不是这样工作的,你需要在目标中说'x',在目标中说'y'
或类似的话effect@0rt不阅读我发布的第一条评论,彻底阅读运算符优先级,也可能是什么意思大括号为什么没有效果?。是的。差异在