Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个python if语句不等于true?_Python_Logic_Statements - Fatal编程技术网

为什么这个python if语句不等于true?

为什么这个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) 因为只

我正在看一个作业,遇到了一些让我困惑的事情,比如我对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)
因为只有一个“=”,所以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,否则它是True
bool([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,否则它是True
bool([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。当前版本的答案似乎正确,值得投票;)