Python大于和小于操作数不起作用?

时间:2014-10-22 14:48:52

标签: 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>卧室&gt; 5不是真的吗?我做错了什么?

附录:

我没有正确解释,我不是在寻找2-5之间的数字,而是要小于2或大于5。

2 个答案:

答案 0 :(得分: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"

这对我来说更具语义性,让其他程序员更容易理解你想要完成的事情。这种方式更明确,并让其他人知道您的明确定位数字不在该范围内,并且您处理卧室可能不存在的情况。

这当然是我的2美分。


如果您期待花车,那么逻辑也可能是:

try: 
   if not 2 < bedrooms > 5:
       bn = "BEDROOM NUMBER = {}".format(bedrooms)           
except NameError:
   bn = "BEDROOMS DOES NOT EXIST"

答案 1 :(得分:3)

没有数字同时小于2且大于5。你混淆了“大于”和“小于”。

if bedrooms and 2 < bedrooms < 5:

如果你想要一个不在2和5之间的数字,那么你可以将“小于”改为“小于或等于”,并否定整个事情。

if bedrooms and not (2 <= bedrooms <= 5):