Python“大于”和“小于”运算符不起作用?

0 投票
2 回答
8896 浏览
提问于 2025-04-29 01:40

我有以下的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):

撰写回答