Python“大于”和“小于”运算符不起作用?
我有以下的Python代码:
if bedrooms and 2 > bedrooms > 5:
bn = "BEDROOM NUMBER = " + str(bedrooms)
elif not bedrooms:
bn = "BEDROOMS DOES NOT EXIST"
我在调试器中逐步执行这段代码,发现虽然我认为卧室的数量是0,并且卧室对象是存在的,但程序却跳到了elif语句。
为了测试这个,我尝试了:
>>> bedrooms
0.0
>>> type(bedrooms)
<type 'float'>
>>> if bedrooms and 2 > bedrooms > 5:
... print "bw"
...
什么都没有打印出来。因此,看起来2 > bedrooms > 5这个条件不成立?我哪里做错了?
补充说明:
我没有解释清楚,我不是想找2到5之间的数字,而是想要小于2或者大于5的情况。
2 个回答
4
你的等号写反了。例如:
>>> 2 > 4 > 5
False
试试这个:
if bedrooms and 2 < bedrooms < 5:
这样做应该能实现你想要的效果:
>>> 2 < 4 < 5
True
补充说明:目前的逻辑有点奇怪。也许可以这样写:
try:
if bedrooms not in [2,3,4,5]:
bn = "BEDROOM NUMBER = {}".format(bedrooms)
except NameError:
bn = "BEDROOMS DOES NOT EXIST"
这样对我来说更有意义,也让其他程序员更容易理解你想要实现的目标。这样写更清楚,也让别人知道你是明确针对那些不在范围内的数字,并且处理了卧室可能不存在的情况。
当然,这只是我个人的看法。
如果你期待的是浮点数,逻辑也可以是:
try:
if not 2 < bedrooms > 5:
bn = "BEDROOM NUMBER = {}".format(bedrooms)
except NameError:
bn = "BEDROOMS DOES NOT EXIST"
3
没有一个数字可以同时小于2又大于5。你把“大于”和“小于”搞混了。
if bedrooms and 2 < bedrooms < 5:
如果你想要一个不在2和5之间的数字,那你可以把“小于”改成“小于或等于”,然后把整个条件取反。
if bedrooms and not (2 <= bedrooms <= 5):