1

抱歉问了一个非常简单的问题。我正在尝试自学 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中它只是不断打印出YES!无论我输入什么。我究竟做错了什么?

当我运行它时:

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

4 回答 4

8

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

if x > 10 and x < 20:

---迂腐解释---

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

(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
于 2013-09-05T22:42:25.107 回答
1

在 Python 中,您需要使用布尔运算符andor结合布尔​​表达式、 not &|或任何其他涉及这些字符的变体:

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

在这种情况下,您还可以将其缩短一点:

if 10 < x < 20:

至于您当前的代码发生了什么,&是一个按位“与”运算符,它的运算符优先级高于比较,因此您最终得到x > (10 & x) < 20的结果相当于(x > (10 & x)) and ((10 & x) < 20). 显然,这与您尝试做的事情相去甚远,但事实证明,这并不总是评估为 True,如果x是负数、028或,它的评估结果为 False 10

于 2013-09-05T22:52:33.623 回答
1

运算符 & 是二元运算符。您可能想使用“和”逻辑运算符。

示例:(a 和 b)为真。

将“&”替换为“和”。

于 2013-09-05T22:46:35.007 回答
0

python中的逻辑与是and关键字,而不是&. 那是按位和运算。

于 2013-09-05T22:43:38.010 回答