为什么这个python if语句不等于true?
我正在看一个作业,遇到了一些让我困惑的事情,比如我对python的掌握不是很好。这是代码为什么这个python if语句不等于true?,python,logic,statements,Python,Logic,Statements,我正在看一个作业,遇到了一些让我困惑的事情,比如我对python的掌握不是很好。这是代码 def main(): list = [1,2] x = 2 if (x in list == True): print("hi") if (x in list): print("Why does this proc?") main() 我相信输出将是两者,但输出只是第二个if语句。我知道在C中,如果你有 if (x = 6) 因为只
def main():
list = [1,2]
x = 2
if (x in list == True):
print("hi")
if (x in list):
print("Why does this proc?")
main()
我相信输出将是两者,但输出只是第二个if语句。我知道在C中,如果你有
if (x = 6)
因为只有一个“=”,所以x现在等于6。(读取时,if(),x=6)
这个python代码是否也发生了类似的情况?是否先检查'list==true',然后再检查x是否在列表中
如有任何见解,将不胜感激 如您所见,是的,表达式需要显式分组:
>>> 2 in [1,2] == True
False
>>> (2 in [1,2]) == True
True
注意,正如@tavo和@MorganThrapp所提到的,没有括号的版本进行链式比较,检查[1,2]中的2,然后检查[1,2]==True
。后者是假的,所以完整的表达也是假的
顺便说一句,不要用内置函数命名变量,比如list
,否则您将无法轻松使用这些函数
此外,您不必将表达式的结果与True
进行比较:
>>> 2 in [1,2]
True
这样做相当于问“蛋糕准备好了吗”是一个真实的陈述吗?而不是“蛋糕准备好了吗?”。正如您所看到的,是的,您的表达式需要显式分组:
>>> 2 in [1,2] == True
False
>>> (2 in [1,2]) == True
True
注意,正如@tavo和@MorganThrapp所提到的,没有括号的版本进行链式比较,检查[1,2]
中的2,然后检查[1,2]==True
。后者是假的,所以完整的表达也是假的
顺便说一句,不要用内置函数命名变量,比如list
,否则您将无法轻松使用这些函数
此外,您不必将表达式的结果与True
进行比较:
>>> 2 in [1,2]
True
这样做相当于问“蛋糕准备好了吗”这句话,而不是“蛋糕准备好了吗?”。正是这样。它正在检查列表中的x和列表==True
。为什么会出现错误?这是一个完全合法的Python声明。是的,这也不起作用,list
不等于False
。在这种情况下,我会说这种行为有点奇怪,但它给我们带来了4
。当len(list)==0时,list被计算为False,否则它是Truebool([1,2])
是True,bool([])
是False。但是[1,2]==True
为False。所以,if list
会“proc”,但if list==True
不会。就是这样。它正在检查列表中的x和列表==True
。为什么会出现错误?这是一个完全合法的Python声明。是的,这也不起作用,list
不等于False
。在这种情况下,我会说这种行为有点奇怪,但它给我们带来了4
。当len(list)==0时,list被计算为False,否则它是Truebool([1,2])
是True,bool([])
是False。但是[1,2]==True
为False。因此,if list
会“proc”,但if list==True
不会。你确定这只是操作优先级的问题吗?因为2in([1,2]==True)
抛出了一个错误。我对术语表示歉意,这只是我突然想在这里发布的东西,它不是实际使用的代码。谢谢你提供的信息@tavo,[1,2]==True
是bool,而2in([1,2]==True)
相当于2in False
,因此类型错误:“bool”类型的参数是不可替代的。@那不勒斯人,我明白了,我只是觉得这个答案的原始版本有点误导(至少我是怎么理解的)因为python内部执行2in([1,2]==True)
而不是(2in[1,2])==True
,所以得到False。当前版本的答案似乎正确,值得投票;)你确定这只是操作优先级的问题吗?因为2in([1,2]==True)
抛出了一个错误。我对术语表示歉意,这只是我突然想在这里发布的东西,它不是实际使用的代码。谢谢你提供的信息@tavo,[1,2]==True
是bool,而2in([1,2]==True)
相当于2in False
,因此类型错误:“bool”类型的参数是不可替代的。@那不勒斯人,我明白了,我只是觉得这个答案的原始版本有点误导(至少我是怎么理解的)因为python内部执行2in([1,2]==True)
而不是(2in[1,2])==True
,所以得到False。当前版本的答案似乎正确,值得投票;)