很抱歉提出一个非常简单的问题。我正在尝试自学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
答案 0 :(得分:7)
&
是python中的按位“和”运算符。您想要的是逻辑“和”,它只是关键字:and
。
if x > 10 and x < 20:
---迂腐的解释---
现在,如果这是唯一的问题,那么你真的很好,因为Python True
和False
只是1
和0
。但是,还有其他事情会导致问题。具体来说,按位运算符的优先级高于比较运算符。因此,Python看到(例如,如果x = 5
)5 > 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中,您需要使用布尔运算符and
和or
来组合布尔表达式,而不是&
,|
或涉及这些字符的任何其他变体:< / 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}},2
或8
。
答案 3 :(得分:0)
python中的逻辑AND是and
个关键字,而不是&
。这是按位和操作。