539

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

我正在使用 2.3 IDLE,到目前为止我尝试的方法不起作用:

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

15 回答 15

1359
if 10000 <= number <= 30000:
    pass

有关详细信息,请参阅文档

于 2012-11-29T15:13:36.087 回答
109
>>> 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
于 2013-12-17T00:59:25.260 回答
59

您的运营商不正确。应该是if number >= 10000 and number <= 30000:。此外,Python 有这种事情的简写,if 10000 <= number <= 30000:.

于 2012-11-29T15:13:34.733 回答
34

你的代码片段,

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 功能。

于 2012-11-29T15:13:43.100 回答
16

两种方法可以比较三个整数并检查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
>>>

并使用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,如前所述,但它要慢得多。

于 2019-05-01T22:15:52.920 回答
12
if number >= 10000 and number <= 30000:
    print ("you have to pay 5% taxes")
于 2012-11-29T15:13:04.877 回答
12

定义数字之间的范围:

r = range(1,10)

然后使用它:

if num in r:
    print("All right!")
于 2018-12-13T01:26:46.910 回答
9

>=比较的问题在于,当您将 a放在应该有 a 的位置时,它们可能难以调试<=

#                             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
于 2015-11-16T22:52:36.470 回答
3

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

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

或在 Python 中:

> print((c - a) * (b - c) >= 0)
True
于 2020-01-07T07:36:07.823 回答
2

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

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

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

 if number in range(10000,30001):
    print ("you have to pay 5% taxes")
于 2022-01-13T09:00:23.590 回答
1

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

代码应该是;

if number >= 10000 and number <= 30000:
    print("you have to pay 5% taxes")
于 2020-01-11T11:34:02.353 回答
1

虽然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]
于 2021-10-27T09:35:42.227 回答
0

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

于 2021-10-03T13:03:35.360 回答
-1

试试这个简单的功能;它检查是否AB和之间CB并且C可能不是正确的顺序):

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)

于 2021-08-22T00:27:13.870 回答
-5

条件应该是,

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

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

于 2020-04-13T11:15:52.747 回答