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

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

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

当前回答

条件应该是,

if number == 10000 and number <= 30000:
     print("5% tax payable")

使用number == 10000的原因是,如果number的值是50000,如果我们使用number >= 10000,条件就会通过,这不是你想要的。

其他回答

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

有两种方法比较三个整数并检查b是否在a和c之间:

if a < b < c:
    pass

and

if a < b and b < c:
    pass

第一个看起来可读性更好,但第二个运行得更快。

让我们使用dis.dis进行比较:

>>> dis.dis('a < b and b < c')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 COMPARE_OP               0 (<)
              6 JUMP_IF_FALSE_OR_POP    14
              8 LOAD_NAME                1 (b)
             10 LOAD_NAME                2 (c)
             12 COMPARE_OP               0 (<)
        >>   14 RETURN_VALUE
>>> dis.dis('a < b < c')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 DUP_TOP
              6 ROT_THREE
              8 COMPARE_OP               0 (<)
             10 JUMP_IF_FALSE_OR_POP    18
             12 LOAD_NAME                2 (c)
             14 COMPARE_OP               0 (<)
             16 RETURN_VALUE
        >>   18 ROT_TWO
             20 POP_TOP
             22 RETURN_VALUE
>>>

使用timeit:

~$ python3 -m timeit "1 < 2 and 2 < 3"
10000000 loops, best of 3: 0.0366 usec per loop

~$ python3 -m timeit "1 < 2 < 3"
10000000 loops, best of 3: 0.0396 usec per loop

此外,您也可以使用range,正如之前建议的那样,但是它要慢得多。

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

#                             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

条件应该是,

if number == 10000 and number <= 30000:
     print("5% tax payable")

使用number == 10000的原因是,如果number的值是50000,如果我们使用number >= 10000,条件就会通过,这不是你想要的。

你的代码片段,

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

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

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

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

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