【问题标题】:Why is this python if statement not equal to true?为什么这个 python if 语句不等于 true?
【发布时间】:2016-05-16 19:09:32
【问题描述】:

我正在完成一项作业,遇到了一些让我感到困惑的事情,因为我对 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。(如其所读,如果 (),x = 6)。

这个python代码是否发生了类似的事情?是先检查 'list == true',然后再检查 x 是否在列表中?

任何见解将不胜感激!

【问题讨论】:

  • 就是这样。它正在检查x in list and list == True
  • 为什么会出现错误?这是一个完全合法的 Python 语句。是的,这也行不通,list 不等于 False
  • 在这种情况下,我想说这种行为有点古怪,但正是它给我们带来了4 < x < 8 之类的东西。
  • 当 len(list) == 0 时,list 被评估为 False,否则为 True
  • bool([1,2]) 为真,bool([]) 为假。然而[1,2] == True 是假的。所以if list 会'proc',但if list == True 不会。

标签: python logic statements


【解决方案1】:

如您所见,是的,您的表达式需要显式分组:

>>> 2 in [1,2] == True
False
>>> (2 in [1,2]) == True
True

请注意,正如@tavo 和@MorganThrapp 所提到的,不带括号的版本正在进行链式比较,检查2 in [1,2],然后检查[1,2] == True。后者是假的,所以完整的表达也是假的。

顺便说一句,不要以list 之类的内置函数命名变量,否则将无法轻松使用这些函数。

另外,您不必将表达式的结果与True 进行比较:

>>> 2 in [1,2]
True

这样做就相当于问“‘蛋糕做好了’是一个真实的陈述吗?”而不是“蛋糕准备好了吗?”。

【讨论】:

  • 你确定这只是关于操作优先级吗?因为2 in ([1, 2] == True) 会抛出错误。
  • 我对术语表示歉意,这只是我在此处发布的内容,实际上并没有使用代码。谢谢你的信息!
  • @tavo, [1,2] == True 是一个布尔值,2 in ([1, 2] == True) 等价于2 in False,因此 TypeError: 'bool' 类型的参数是不可迭代的。
  • @Neapolitan,我明白了,我只是认为这个答案的原始版本有点误导(至少我是怎么理解的)说你得到 False 因为 python 内部确实 2 in ([1,2] == True)(2 in [1,2]) == True。当前版本的答案似乎是正确的,值得赞成;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2012-09-10
  • 2013-09-11
  • 2019-10-09
相关资源
最近更新 更多