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

时间:2012-11-29 15:12:00

标签: python

我正在使用2.3 IDLE而我遇到了问题。

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

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

效果不佳。

12 个答案:

答案 0 :(得分:780)

if 10000 <= number <= 30000:
    pass

答案 1 :(得分:56)

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

答案 2 :(得分:43)

您的操作员不正确。应该是if number >= 10000 and number <= 30000:。此外,Python还有一种简写,if 10000 <= number <= 30000:

答案 3 :(得分:21)

您的代码段,

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功能将进一步描述in the Python documentation

答案 4 :(得分:7)

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

答案 5 :(得分:5)

比较的问题是当你将>=放在应该有<=

的地方时,它们很难调试
#                             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

编辑:人们似乎更关心microbench标记和酷链操作。我的答案是关于防御性(针对错误的攻击面)编程。

由于评论中的声明,我在这里为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

答案 6 :(得分:3)

定义数字之间的范围:

r = range(1,10)

然后使用它:

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

答案 7 :(得分:1)

假设存在3个非负整数:abc。从数学上讲,如果我们想确定c是否在ab之间,则可以使用以下公式:

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

或在Python中:

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

答案 8 :(得分:0)

两种方法比较三个整数并检查 b 是否在 a c 之间:< / p>

if a < b < c:
    pass

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 ,但是它要慢得多。

答案 9 :(得分:0)

仅当数字介于10,000和30,000之间时,您才希望输出打印给定语句。

代码应为

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

答案 10 :(得分:-1)

另一种解决方案

def check_if_between_range(current, start, end):
    if current == start or end:
        return True
    elif start < end:
        return current in range(start, end)
    else:
        return current in range(end, start)

答案 11 :(得分:-3)

条件应该是

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

使用number == 10000的原因是,如果数字的值为50000,而我们使用number >= 10000,则条件将通过,这不是您想要的。