虽然在python中没有意义

时间:2018-05-24 02:59:21

标签: python python-3.x

我不知道那里发生了什么。 这是如此简单,但我已经进行了很长时间的实验,这没有任何意义。

以下是代码:

var = int( input( 'Select "2" o "3" (Write your answer). ' ))
while var != 1 & var != 2:
    var = int (input( 'Invalid. You have to write "2" or "3". ' ))

print('You select', var)

如果我用1 回答输入,它就可以正常工作了。但当我回答 2时,它进入循环最奇怪的部分是当我写 0时它不会进入循环

  

有人知道可能发生的事情。 也许是一个   口译员问题......

这只是我的问题的减少,但我不能通过这种方式使用while循环!!

1 个答案:

答案 0 :(得分:3)

&and在Python中不是同一个运算符。

  • and表示logical (aka boolean) and,你想要的那个 - 如果它的两个论点都是真实的那么它是真的。
  • &表示bitwise and - 它为两个参数中1的每个位返回一个带1的新数字(例如,5 & 3,aka { {1}},0b101 & 0b011,又名10b0016 & 1 - 这是假的,即使两个参数都是真的,因为它们不是共享任何共同点)。那不是你想要的。

最重要的是,他们有不同的operator precedence(请注意表中0高于and,但!=低于此值,所以你&# 39;实际上做的是&。自var != (1 & var) != 2以来,无论1 != 2恰好是什么,都是如此。

这里有两个不同的区别,但值得学习:

  • 1 & var短路:如果x and y为假,则Python不会评估x。这意味着您可以执行y之类的操作,并知道它不会调用if x and x.spam()并在None.spam()x时引发异常。但None只是一个普通的运算符,如&,它总是计算两个参数。
  • +总是将值比较为boolean truthy-or-falsey;它不能被自定义类覆盖来执行自定义事务,但x and y可以 - 例如,它表示如果值是集合则设置交集,或者按位元素并且如果它们是numpy数组等等则设置交集