简单的python if语句

时间:2013-09-05 22:40:03

标签: python

很抱歉提出一个非常简单的问题。我正在尝试自学python,这似乎很容易,但我会陷入一些困境。

x = input("Enter a number: ")

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

else:
   print "Not between 10 and 20"

在C(伪代码)中我会做

if(x > 10 && x < 20)
     "yes"
else
     "no"

它会工作..但在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

4 个答案:

答案 0 :(得分:7)

&是python中的按位“和”运算符。您想要的是逻辑“和”,它只是关键字:and

if x > 10 and x < 20:

---迂腐的解释---

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

(5 > (10 & 5)) and ((10 & 5) < 20)

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

(5 > 0) and (0 < 20)
True

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

(8 > (10 & 8)) and ((10 & 8) < 20)
(8 > 8) and (8 < 20)
False

答案 1 :(得分:1)

运营商&amp;是二元运算符。您可能想要使用'和'逻辑运算符。

示例:(a和b)为真。

替换'&amp;'为'和'。

答案 2 :(得分:1)

在Python中,您需要使用布尔运算符andor来组合布尔表达式,而不是&|或涉及这些字符的任何其他变体:< / p>

if x > 10 and x < 20:
   print "YES!!!"
else:
   print "Not between 10 and 20"

在这种情况下,你也可以稍微缩短一点:

if 10 < x < 20:

至于当前代码发生了什么,&是一个按位“和”运算符,它具有比比较更高的运算符优先级,所以最终得到的x > (10 & x) < 20等于{ {1}}。显然这与你想要做的相差甚远,但事实证明这并不总是评估为True,如果(x > (10 & x)) and ((10 & x) < 20)是负数,x,{{0,则评估为False 1}},28

答案 3 :(得分:0)

python中的逻辑AND是and个关键字,而不是&。这是按位和操作。