我有以下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。
答案 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):