简单的python if语句

Sha*_*ars 0 python

很抱歉问一个非常简单的问题.我正在尝试自学python,这看起来很简单,但我却陷入了一些困境.

x = input("Enter a number: ")

if x > 10 & x < 20:
   print "YES!!!"

else:
   print "Not between 10 and 20"
Run Code Online (Sandbox Code Playgroud)

在C(伪代码)中我会这样做

if(x > 10 && x < 20)
     "yes"
else
     "no"
Run Code Online (Sandbox Code Playgroud)

它会工作..但在Python中它只是保持打印出来!无论我输入什么.我究竟做错了什么?

当我运行它:

Enter a number: 3
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 13
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 6
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 13
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 4
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 8
Not between 10 and 20
>>> ================================ RESTART ================================
>>> 
Enter a number: 13
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 3
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 8
Not between 10 and 20
Run Code Online (Sandbox Code Playgroud)

Hen*_*ter 7

&是python中的按位 "和"运算符.你想要的是逻辑"和",它只是关键字:and.

if x > 10 and x < 20:
Run Code Online (Sandbox Code Playgroud)

---迂腐的解释---

现在,如果这是唯一的问题,那么你实际上会很好,因为Python True并且False只是10.但是,还有其他事情会导致问题.具体来说,按位运算符的优先级高于比较运算符.因此,Python看到(例如,if x = 5)5 > 10 & 5 < 20并将其解析为5 > (10 & 5) < 20,这是一个链式比较.这进一步扩展到:

(5 > (10 & 5)) and ((10 & 5) < 20)
Run Code Online (Sandbox Code Playgroud)

评估为True,因为10 & 5为零:

(5 > 0) and (0 < 20)
True
Run Code Online (Sandbox Code Playgroud)

请注意,10 & 8评估为8,这就是为什么当您输入8时得到不满足条件的"正确"结果(因为第一个条件8不小于8):

(8 > (10 & 8)) and ((10 & 8) < 20)
(8 > 8) and (8 < 20)
False
Run Code Online (Sandbox Code Playgroud)

  • 由于优先权,这在这里主要是重要的; `x> 10&x <20`被解释为[链式比较](http://docs.python.org/2/reference/expressions.html#not-in)`x>(10&x)<20 `. (3认同)