Ответ 1
if 10000 <= number <= 30000:
pass
Как определить, находится ли данное целое число между двумя другими целыми числами (например, больше/равно 10000
и меньше/равно 30000
)?
Я использую 2.3 IDLE, и то, что я пытался до сих пор, не работает:
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
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:
.
Ваш фрагмент кода,
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.
if number >= 10000 and number <= 30000:
print ("you have to pay 5% taxes")
Проблема с сравнениями заключается в том, что их можно будет отлаживать при установке >=
, где должен быть <=
# 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
Определите диапазон между числами:
r = range(1,10)
Тогда используйте это:
if num in r:
print("All right!")
Есть два способа сравнить три целых числа и проверить, находится ли 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
Кроме того, вы можете использовать диапазон, как предлагалось ранее, однако он намного медленнее.