我如何确定一个给定的整数是否在另外两个整数之间(例如大于/等于10000和小于/等于30000)?

到目前为止,我的尝试并没有奏效:

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

当前回答

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

其他回答

虽然10 <= number <= 20适用于Python,但我发现使用range()的表示法更具可读性:

if number in range(10, 21):
    print("number is between 10 (inclusive) and 21 (exclusive)")
else:
    print("outside of range!")

请记住,第二个上限参数不包括在范围设置中,可以通过以下方法验证:

>>> list(range(10, 21))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

但是,只有当range()方法没有运行在某些性能关键路径上时才使用它。对于大多数需求来说,单个调用仍然足够快,但如果运行10,000,000次,我们清楚地注意到与A <= x < b相比,性能要慢近3倍:

> { time python3 -c "for i in range(10000000): x = 50 in range(1, 100)"; } 2>&1 | sed -n 's/^.*cpu \(.*\) total$/\1/p'
1.848

> { time python3 -c "for i in range(10000000): x = 1 <= 50 < 100"; } 2>&1 | sed -n 's/^.*cpu \(.*\) total$/\1/p'
0.630

定义数字之间的范围:

r = range(1,10)

然后使用它:

if num in r:
    print("All right!")

假设有3个非负整数:a、b和c。从数学上讲,如果我们想确定c是否在a和b之间,可以使用以下公式:

(c - a) * (b - c) >= 0

或者在Python中:

> print((c - a) * (b - c) >= 0)
True

比较的问题是,当您在应该是<=的地方放置了>=时,它们可能很难调试

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

Python允许你用文字表达你的意思

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

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

编辑:人们似乎更关心微基准标记和如何酷链操作。我的答案是关于防御性编程(减少漏洞的攻击面)。

由于评论中的说法,我在这里添加了Python3.5.2的微基准测试

$ 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

当且仅当数值落在10,000到30,000之间时,希望输出输出打印给定语句。

代码应该是;

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