很抱歉问一个非常简单的问题.我正在尝试自学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)
&是python中的按位 "和"运算符.你想要的是逻辑"和",它只是关键字:and.
if x > 10 and x < 20:
Run Code Online (Sandbox Code Playgroud)
---迂腐的解释---
现在,如果这是唯一的问题,那么你实际上会很好,因为Python True并且False只是1和0.但是,还有其他事情会导致问题.具体来说,按位运算符的优先级高于比较运算符.因此,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)
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |