确定整数是否在另外两个整数之间



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

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: . 或者,Python对这种事情有一个简写,if 10000 <= number <= 30000:

要检查该数字是否在 10000 - 30000 范围内,请使用 Python 区间比较:

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

文档中进一步描述了此 Python 功能。

有两种方法可以比较三个整数并检查 b 是否在 ac 之间:

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
>>>

并使用时间

~$ 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

此外,您可以按照之前的建议使用范围,但它要慢得多。

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

定义数字之间的范围:

r = range(1,10)

然后使用它:

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

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

以下是几种可能的方法,从最佳到最差的性能排序(即第一种性能最好)

     # Old school check
     if 10000 <= b and b <=30000:
        print ("you have to pay 5% taxes")
     # Python range check
     if 10000 <= number <= 30000:
        print ("you have to pay 5% taxes")
     # As suggested by others but only works for integers and is slow
     if number in range(10000,30001):
        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

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

(c -

a) * (b - c)>= 0

或者在 Python 中:

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

我正在添加一个还没有人提到的解决方案,使用 sympy 库中的 Interval 类:

from sympy import Interval
lower_value, higher_value = 10000, 30000
number = 20000
 # to decide whether your interval shhould be open or closed use left_open and right_open 
interval = Interval(lower_value, higher_value, left_open=False, right_open=False)
if interval.contains(number):
    print("you have to pay 5% taxes")
您希望

输出打印给定的语句,当且仅当数字介于 10,000 和 30,000 之间时。

代码应该是;

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

你用了>=30000,所以如果数字是45000,它将进入循环,但我们需要它大于10000但小于30000。将其更改为 <=30000 就可以了!

试试这个简单的函数;它检查A是否在 BC 之间(BC 的顺序可能不正确):

def isBetween(A, B, C):
    Mi = min(B, C)
    Ma = max(B, C)
    return Mi <= A <= Ma

所以isBetween(2, 10, -1)isBetween(2, -1, 10)一样.

条件应该是,

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

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

最新更新