Модуль 2 · Условия

Справочник по Python · модуль 2 · условия

Глава 2.3

2.3

Двойное сравнение.
Проверка диапазона

Чтобы проверить, находится ли значение между двумя границами, Python позволяет собрать два сравнения в одну цепочку. Такая запись короче и читается почти как математическое неравенство.

Категория
Условия и сравнения
Уровень
Начальный
Связанные темы
Операторы сравнения, and, координаты
Зачем это знать
Проверять интервалы без повторения переменной

§1Цепочка сравнений

Запись a <= x <= b проверяет сразу две границы: x не меньше a и не больше b.

Pythonдве равносильные записи
a <= x <= b

# то же условие в развёрнутом виде
a <= x and x <= b

Python проверяет оба сравнения. Результат будет True, только если значение проходит левую и правую границу.

Записи различаются одним: в цепочке среднее выражение вычисляется один раз, в развёрнутой записи оно встречается дважды и вычисляется дважды.

main.pyсчитаем, сколько раз сработала функция
calls = []

def value():
    calls.append(1)
    return 5

print(1 < value() < 10)
print(len(calls))
Выводфункция вызвана однократно
True
1
main.pyто же условие через and
calls.clear()

print(1 < value() and value() < 10)
print(len(calls))
Выводфункция вызвана дважды
True
2

Когда в середине стоит переменная, результат одинаковый. Разница заметна, если в середине вызов функции: в цепочке функция вызывается один раз, в развёрнутой записи — два.

Цепочка, как и and, прекращает проверку на первом ложном сравнении: если левое сравнение ложно, правое не вычисляется.

main.pyправая часть не выполнится
def boom():
    raise RuntimeError("сюда не дойдёт")

print(10 < 5 < boom())
Выводфункция boom() не вызвана
False

§2Включённые границы

Знаки <= и >= включают крайние значения в диапазон.

main.pyдиапазон от 1 до 3 включительно
print(1 <= 1 <= 3)  # True
print(1 <= 2 <= 3)  # True
print(1 <= 3 <= 3)  # True
print(1 <= 4 <= 3)  # False

Так проверяют возраст, допустимую температуру, координату, процент выполнения и любое значение с нижней и верхней границами.

§3Строгие границы

Знак < исключает границу. Знаки в одной цепочке можно комбинировать.

ЗаписьКакие значения подходятГраницы
1 <= x <= 3от 1 до 3обе включены
1 < x < 3между 1 и 3обе исключены
1 <= x < 3от 1 до 31 включено, 3 исключено
1 < x <= 3от 1 до 31 исключено, 3 включено

§4Правильный порядок

Удобнее записывать границы слева направо по возрастанию: меньшая граница, переменная, большая граница.

Pythonчитается слева направо
minimum <= value <= maximum

Запись maximum >= value >= minimum тоже работает, но читать её труднее. Не смешивайте направления: условие 1 <= x >= 3 означает «x не меньше обеих границ», а не «между 1 и 3».

§5Точка в прямоугольнике

Точка (x, y) находится в заштрихованной области, если её координата x попадает от 1 до 3, а y — от −3 до 1. Границы входят в область.

Прямоугольная область: x от 1 до 3, y от минус 3 до 1
Диапазоны координат заштрихованной области
Pythonусловие для двух координат
1 <= x <= 3 and -3 <= y <= 1

Здесь две цепочки сравнений соединены оператором and: точка должна одновременно подходить и по горизонтали, и по вертикали.

§6Полная программа

main.pyпроверка точки
x = 2
y = 0

inside_x = 1 <= x <= 3
inside_y = -3 <= y <= 1
inside_area = inside_x and inside_y

print(inside_area)
Выводрезультат запуска
True

Имена inside_x и inside_y показывают, какая координата прошла проверку. Это особенно удобно при поиске ошибки.

§7Когда одной цепочки мало

Цепочка описывает один непрерывный диапазон. Если подходят два раздельных диапазона, нужны два условия и or.

Pythonвне центрального диапазона
temperature = -12
is_extreme = temperature < -10 or temperature > 35

print(is_extreme)  # True

§8Частые ошибки

Что написаноЧто произойдётКак правильно
1 <= x >= 3проверяется, что x не меньше обеих границ1 <= x <= 3
x >= 1 or x <= 3условие истинно почти для любого числаx >= 1 and x <= 3 или цепочка
1 < x < 3, когда края подходятзначения 1 и 3 будут исключены1 <= x <= 3
1 <= x <= 3 and -3 <= 1во второй проверке потеряна переменная y1 <= x <= 3 and -3 <= y <= 1

§9Проверьте себя

Что означает 0 <= score <= 100?

Значение score находится от 0 до 100 включительно.

Как проверить диапазон от 10 включительно до 20 не включительно?

10 <= value < 20.

Попадает ли точка (3, -3) в область из примера?

Да. Обе координаты лежат на включённых границах.

§10Шпаргалка

Обе границы включеныa <= x <= b
Обе исключеныa < x < b
Только левая включенаa <= x < b
Две координатыa <= x <= b and c <= y <= d

Итог главы

Цепочка сравнений проверяет нижнюю и верхнюю границы одной записью. Знаки < и <= определяют, входят ли края в диапазон. Для двух независимых величин, например координат, составьте две цепочки и соедините их через and.

Глава 2.3 · Двойное сравнение и диапазоны · Справочник по Python Автор: Макаров Максим Николаевич