如何检查一个int是否在两个数之间?

我正在使用2.3 IDLE,并遇到问题。

我需要检查一个数字是否在两个其他数字,10000和30000之间:

if number >= 10000 and number >= 30000: print ("you have to pay 5% taxes") 

这工作不太好。

 if 10000 <= number <= 30000: pass 
 r=range(1,4) >>> 1 in r True >>> 2 in r True >>> 3 in r True >>> 4 in r False >>> 5 in r False >>> 0 in r False 

您的操作员不正确。 if number >= 10000 and number <= 30000: 另外, if 10000 <= number <= 30000: ,Python对这类事物也是一个简写。

你的代码片段,

 if number >= 10000 and number >= 30000: print ("you have to pay 5% taxes") 

实际上是检查数字是否大于10000和30000。

假设你想检查数字是在10000-30000范围内,你可以使用Python间隔比较:

 if 10000 <= number <= 30000: print ("you have to pay 5% taxes") 

这个Python特性在Python文档中有进一步的描述。

 if number >= 10000 and number <= 30000: print ("you have to pay 5% taxes") 

比较的麻烦是当你把一个>=应该有一个<=时,它们可能很难debugging

 # v---------- should be < if number >= 10000 and number >= 30000: print ("you have to pay 5% taxes") 

Python可以让你用文字来expression你的意思

 if number in xrange(10000, 30001): # ok you have to remember 30000 + 1 here :) 

在Python3中,你需要使用range而不是xrange

编辑:人们似乎更关心microbench标志和多么酷的链接操作。 我的答案是关于防御(对bug比较less的攻击面)编程。

作为评论中的一个声明的结果,我在Python3.5.2中添加了微型基准testing

 $ python3.5 -m timeit "5 in range(10000, 30000)" 1000000 loops, best of 3: 0.266 usec per loop $ python3.5 -m timeit "10000 <= 5 < 30000" 10000000 loops, best of 3: 0.0327 usec per loop 

如果你担心性能,你可以计算一次范围

 $ python3.5 -m timeit -s "R=range(10000, 30000)" "5 in R" 10000000 loops, best of 3: 0.0551 usec per loop