Как проверить, находится ли int между двумя числами?
Я использую 2.3 простоя и у меня возникли проблемы.
Мне нужно проверить, является ли число между двумя другими числами, 10000 и 30000:
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
Это не работает слишком хорошо.
6 ответов:
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.
проблема с сравнениями заключается в том, что их трудно отлаживать, когда вы ставите
>=где должно быть<=# 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: люди, похоже, больше обеспокоены знаками 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
Comments