Определить, есть ли целое число между двумя другими целыми числами?

Как определить, находится ли данное целое число между двумя другими целыми числами (например, больше/равно 10000 и меньше/равно 30000)?

Я использую 2.3 IDLE, и то, что я пытался до сих пор, не работает:

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

Ответ 1

if 10000 <= number <= 30000:
    pass

Ответ 2

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

Ответ 3

Ваш оператор неверен. Должно быть if number >= 10000 and number <= 30000:. Кроме того, у Python есть сокращение для такого рода вещей, if 10000 <= number <= 30000:.

Ответ 4

Ваш фрагмент кода,

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 далее описана в документации Python.

Ответ 5

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

Ответ 6

Проблема с сравнениями заключается в том, что их можно будет отлаживать при установке >=, где должен быть <=

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

edit: Люди, похоже, больше заботятся о отметках на микрообъектах и ​​о том, как крутые операции цепочки. Мой ответ касается программирования защиты (меньше атаки для ошибок).

В результате претензии в комментариях я добавил микро-тест для 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

Ответ 7

Определите диапазон между числами:

r = range(1,10)

Тогда используйте это:

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

Ответ 8

Есть два способа сравнить три целых числа и проверить, находится ли b между a и c:

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

Кроме того, вы можете использовать диапазон, как предлагалось ранее, однако он намного медленнее.