Логические выражения и операторы в Python 3

    Команда Simple-Server
    03.06.2026
    7 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Логическое выражение в самом простом смысле — это математическое сравнение. В Python вопрос « Что больше: 3 или 5?» будет записан в следующем виде: 3 > 5 и звучать как: «Три больше пяти. Правда? — Нет».

    Или такой вариант: 4 != 0 (4 не равно 0. Правда?)

    Как записываются операторы сравнения в Python:

    • a == b - А равно Б
    • a > b - А больше Б
    • a >= b - А больше или равно Б
    • a < b - А меньше Б
    • a <= b - А меньше или равно Б
    • a != b - А не равно Б
    a = 5 b = 10 print(a == b)   #False  print(a > b)   #False print(a >= b)   #False print(a < b)   #True print(a <= b)   #True print(a != b)   #True

    Результат такого сравнения можно сохранить в переменную, как и любое другое значение:

    a = 5 b = 10 expr = a > b print(expr)   #False

    Можно сравнивать сразу несколько значений подряд:

    a = 4 expr = 0 < a < 10 print(expr) #True a = 15 expr = 0 < a < 10 print(expr) #False

    В итоге в первом значении мы получили True, а во втором Python выдал False.

    Помимо чисел, в Python можно сравнивать друг с другом строки , списки и другие типы данных.

    Вот, например, как выглядит сравнение двух строк в Python:

    s1 = 'python' s2 = 'python' s3 = 'Python' # Поменяем одну букву на заглавную​ print(s1 == s2) #True print(s1 == s3) #False

    Во втором случае результатом оказалась ложь, т.к. сравнение чувствительно к регистру символов.

    Также строки можно проверять между собой на большинство/меньшинство.

    print('abc' > 'abc') #False print('abc' > 'aaa') #True print('abc' > 'x') #False
    • В первом случае всё просто — строки равны.
    • Во втором происходит посимвольное сравнение строк. Первые два символа равны, сравниваются следующие. b > a истинно, т.к. символ b стоит в алфавите по порядку после a. Поэтому всё выражение истинно. Чтобы проще было понять, можно вместо букв поставить их порядковые номера в алфавите: 123 > 111
    • Посимвольное сравнение не зависит от длины строк, поэтому в третьем случае выражение ложно: a > x.
    print('a' > 'x')   #False

    Такое сравнение называется лексикографическим: wikipedia.

    Сравнение других типов значений

    Сравнение списков аналогично сравнению строк. Например, когда условие в Python не равно. Каждый элемент списка по очереди сравнивается с другим.

    print([1, 2, 3] > [1, 2, 3]) #False print([1, 2, 3] > [1, 1, 1]) #True print([1, 2, 3] > [25]) #False

    Значения разных типов можно также сравнивать между собой:

    expr1 = '1' == 1 expr2 = '' == 0 print(expr1) #False print(expr2) #False

    Результат ложный, т.к. типы данных не равны (строка и число).

    Проверка на большинство/меньшинство разных типов выдаст ошибку:

    print('a' > 1) TypeError: '>' not supported between instances of 'str' and 'int' print((1, 1, 1) < [1, 2, 3]) TypeError: '<' not supported between instances of 'tuple' and 'list'

    Преобразование значений в тип bool

    Значения False или True можно получить непосредственно из самих значений, без операции сравнения. Например, строка 'a' будет True, а 0 — False. Для этого нужно вызвать функцию bool() и передать ей параметр, который мы хотим преобразовать:

    var1 = bool('a') var2 = bool(0) print(var1) #True print(var2) #False

    А вот пустая строка или список будут равны False:

    var1 = bool('') var2 = bool([]) print(var1) #False print(var2) #False

    Логика простая — если размер списка или строки равен нулю, то переменная bool в Python будет равна False. 0 — это также False.

    Все остальные значения, отличные от 0 или с длиной больше 0 будут True.

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

    Упрощенная версия такой проверки:

    user_name = input('Введите Ваше имя: ') if user_name: print(f'Добро пожаловать, {user_name}!') else: print('Это обязательное поле') Введите Ваше имя:  Это обязательное поле Введите Ваше имя: Иван Добро пожаловать, Иван!

    Если мы хотим проверить на истинность сразу несколько логических выражений или значений, то нам нужно использовать логические операторы.

    Например ввел ли пользователь свое имя и больше ли 12 лет его возраст:

    name = 'Иван' age = 10 expr = name and age > 12 print(expr)   #False

    Мы использовали логический оператор and. Он возвращает истинное значение, только тогда, когда по обе стороны от него находятся истинные значения.

    • or возвращает истинное значение, когда хотя бы с одной стороны от него находится истинное значение.
    • not меняет значение на противоположное.

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

    print(True and False) # False print(True or False) # True print(not True) # False print(not False) # True

    Логические операции можно комбинировать между собой в одном выражении:

    expr = not True and False print(expr)   #False

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

    expr = not (True and False) print(expr)   #True

    Значение поменялось на истинное, т.к. сначала считается выражение внутри скобок (False), а затем происходит его инверсия. В Python есть одна особенность при использовании операторов and и or. Они не обязательно возвращают только True и False. Они возвращают непосредственно само значение, на котором остановились вычисления.

    name1 = 'Иван' age = 0 name2 = 'Василий' print(name1 and age and name2) #0 print(name1 or age or name2) #Иван
    • В первом случае вернулся 0, потому что расчеты остановились на переменной age. Так как все операторы являются and, то если одно из значений ложно, то и всё выражение будет ложно, следовательно, дальше считать нет смысла.
    • Во втором случае обратная ситуация. Все операторы являются or, поэтому вычисления останавливаются на первом истинном значении. Собственно, оно нам и вернулось — значение переменной name1.

    Другие виды логических операторов

    Существуют также другие логические операции, которые используются реже и в специфических ситуациях.

    Например, есть логические побитовые операции, которые применяются в шифровании данных.

    Одна из таких — XOR: исключающее ИЛИ. В Python этой операции соответствует символ ^.

    Пример шифрования числа. Вместо чисел могут быть любые бинарные данные.

    phrase = 2022 key = 101 # Шифрование используя ключ encrypt = phrase ^ key print(encrypt)# Расшифровка сообщения используя ключ decrypt = encrypt ^ key print(decrypt) 1923 2022

    Список всех побитовых операторов в Python:

    ОперацияЗначение
    a & bПобитовое И для a и b
    ab
    a ^ bИсключающее ИЛИ для a и b
    ~aИнверсия битов для a
    a << bПобитовый сдвиг влево для a на b
    a >> bПобитовый сдвиг вправо для a на b

    Однако не все логические операции присутствуют в Python. Например, в нем нет импликации.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны