undo
search menu close

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

📅 17 апреля 2025 г. 0:39

Логическими выражениями называют утверждения, которые могут быть оценены как истинные (англ. True) или ложные (англ. False). Например, выражение «Идёт дождь» в зависимости от погоды будет истинным или ложным. Так и в Python результатом вычисления любого логического выражения всегда будет значение логического типа данных: True или False.

Робот Кеша читает

Логический тип данных также называют булевым типом в честь британского математика и философа Джорджа Буля. Именно он в середине 19 века предложил систему рассуждений, где каждое высказывается либо истинное, либо ложное, что легло в основу булевой алгебры.
Именно благодаря работе Буля современные компьютеры обрабатывают данные, основываясь на простейших двоичных состояниях: 1 и 0, соответствующих логическим понятиям истинности ложности.

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

Логические значения объектов

Любой объект в Python обладает определенным логическим значением, которое можно получить с помощью встроенной функции bool().

Функция bool(obj)
Описание Возвращает начальный индекс первого вхождения подстроки sub в строку str
Параметры obj – объект, логическое значение которого необходимо определить.
Возвращаемое значение True или False

Функция bool() возвращает True, если объект считается истинным, и False, если объект считается ложным.

К истинным значениям относятся любые непустые объекты и ненулевые числа:

print(bool("В саду распустились розы")) 
# Вывод: True

print(bool({"name": "Копатыч", "location": "Долина Смешариков"})) 
# Вывод: True

print(bool(256)) 
# Вывод: True

К ложным значениям относятся любые пустые объекты, число 0 любого типа и значение None:

print(bool("")) 
# Вывод: False

print(bool(0.0)) 
# Вывод: False

print(bool(None))
# Вывод: False

Связь с типом целых чисел

Булевы значения True и False тесно связаны с целым типом данных (int): True соответствует числу 1, а False – числу 0.

Преобразовать булевы значений в целые числа позволяет функция int():

print(int(True)) 
# Вывод: 1

print(int(False)) 
# Вывод: 0

Эта особенность может применяется в арифметических операциях, хотя это не является распространенной практикой.

Операторы сравнения

Для проверки отношения между объектами используются операторы сравнения. Их цель – сравнение содержимого объектов, чтобы определить отношение между двумя величинами. Результатом сравнения всегда является булево значение, указывающее на истинность или ложность выражения.

Оператор Название Описание Пример Результат
> Больше Если левый операнд больше правого, возвращает True, иначе – False 4 > 76
23 > 54
True
False
>= Больше или равно Если левый операнд больше или равен правому, возвращает True, иначе – False 14 >= 14
22 >= 39
True
False
< Меньше Если левый операнд меньше правого, возвращает True, иначе – False 12 < 93
56 < 3
True
False
<= Меньше или равно Если левый операнд меньше или равен правому, возвращает True, иначе – False 45 <= 45
34 <= 19
True
False
== Равно Если левый операнд равен правому, возвращает True, иначе – False 73 == 73
34 == 12
True
False
!= Не равно Если левый операнд не равен правому, возвращает True, иначе – False 12 != 32
37 != 37
True
False

Сравнение чисел в Python работает точно так же, как и в обычной математике:

print(21 < 42) 
# Вывод: True

print(12 <= 1) 
# Вывод: False

print(14 == 17) 
# Вывод: False
Важно различать оператор сравнения на равенство == и оператор присваивания =. Они выполняют совершенно разные задачи, и неправильное их применение приведёт к ошибкам.

Сравнение строк

Операторы сравнения могут применяться и к строкам. В этом случае строки сравниваются лексикографически (посимвольно) на основе их порядковых номеров в Юникоде. Сначала сравнивается первый символ каждой строки, затем второй и так далее. Строчные буквы считаются меньше прописных, а латинские символы больше кириллических.

Например, если сравнить строки, содержащие строчные английские буквы "a" и "b", то строка с буквой "a" будет меньше:

print("a" < "b") 
# Вывод: True

Это связано с тем, что порядковый номер символа "a" в Юникоде меньше, чем порядковый номер символа "b". Убедимся в этом, получив номера символов с помощью функции ord():

print(ord("a")) 
# Вывод: 97

print(ord("b"))
# Вывод: 98

Так как 97 < 98, то и "a" < "b".

Также при сравнении учитывается регистр букв: заглавная буква считается меньшей, чем строчная.

print("Груша" > "груша") 
# Вывод: False

print("большой театр" >= "Большой театр") 
# Вывод: True

Если символы совпадают, то больше будет так строка, у которой больше длина:

print("Гол" < "Голова") 
# Вывод: True

print("Котёнок" > "Кот") 
# Вывод: True

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

Операторы идентичности

В отличие от оператора сравнения на равенство ==, который проверяет равенство значений, операторы идентичности is и is not проверяют указывают ли две переменные на один и тот же объект в памяти компьютера.

Оператор Описание Пример Результат
is Если оба операнда ссылаются на один и тот же объект в памяти, возвращает True, иначе – False x is y True или False
is not Если оба операнда ссылаются на разные объекты в памяти, возвращает True, иначе – False x is not y True или False

На практике операторы is и is not чаще всего применяются при сравнении с None для проверки на отсутствие значения, так как None представляет собой уникальный объект, и любое другое значение гарантированно не совпадает с ним по ссылке:

amount = None
print(amount is None)
# Вывод: True

Операторы идентичности следует использовать с осторожностью при сравнении изменяемых объектов (таких как списки и словари), так как они проверяют равенство идентификаторов объектов, а не их содержимого.

Например, создадим две переменные целочисленного типа данных (неизменяемого) с одинаковым значением и увидим, что обе будут ссылаться на один объект в памяти компьютера:

number1 = 10
number2 = 10
print(number1 is number2) 
# Вывод: True

Однако для каждого из списков (изменяемого типа данных), несмотря на одинаковое содержимое, будут созданы новые объекты:

fruits_1 = ["Яблоки", "Груши"]
fruits_2 =  ["Яблоки", "Груши"]
print(fruits_1 is fruits_2) 
# Вывод: False

Но если одной переменной присваивается значение другой, они будут ссылаться на один и тот же объект:

fruits_1 = ["Яблоки", "Груши"]
fruits_2 = fruits_1
print(fruits_1 is fruits_2) 
# Вывод: True

Логические операторы

Логические операторы выполняют логические операции над простыми выражениями, объединяя их в единое сложное выражение. Основываясь на законах алгебры логики, в Python выделяют три основные логические операции: отрицание, конъюнкцию и дизъюнкцию.

Отрицание изменяет значение условия на противоположное, фактически являясь инверсией. В реальной жизни аналогичную роль играет частица «не». Предположим, вы заявляете друзьям в кафе: «Мы закажем пиццу с ананасами», но ваш приятель отрицает ваше высказывание: «Мы не закажем пиццу с ананасами».

Термины «конъюнкция» и «дизъюнкция» могут вызвать затруднения, поскольку заимствованы из латыни. Конъюнкция буквально означает «связывание», отражая требование выполнения всех заданных условий одновременно, поэтому её ассоциируют с союзом «и». Так, если кто-то заявит: «Мы закажем и пиццу с ананасами, и пиццу с грибами», то его высказывание будет истинным только, если будуи заказаны обе пиццы.

Что касается дизъюнкции, то её корень восходит к слову «разделять» и сама операция приближена к союзу «или». Она воплощает понятие альтернативы, подразумевая выбор одного или обоих из предлагаемых вариантов. Подобно ситуации, когда кто-то скажет: «Мы закажем или пиццу с грибами, или пиццу с курицей», и он будет прав как в случае заказа одной из перечисленных пицц, так и сразу обеих.

В традиционной булевой алгебре логические операции аналогичны арифметическим действиям, поэтому конъюнкцию также называют логическим умножением, а дизъюнкцию – логическим сложением.

В Python рассмотренные логические операции реализуются тремя основными операторами: not (с англ. – не), and (с англ. – и) и or (с англ. – или). Первый реализует отрицание, второй – конъюнкцию, а третий – дизъюнкцию.

Оператор Операция Описание Пример Результат
not Отрицание Изменяет значение операнда на противоположное: True становится False, а FalseTrue. not True False
and Конъюнкция Возвращает True, если оба операнда истинны, иначе – False. True and False False
or Дизъюнкция Возвращает True, если хотя бы один из операндов истинен, иначе – False. True or False True
Логические операторы работают с логическими значениями (True и False), а их приоритет аналогичен тому, который установлен для арифметических операций:
  1. Отрицание
  2. Конъюнкция (логическое умножение)
  3. Дизъюнкция (логическое сложение)

Но с помощью круглых скобок можно изменить приоритет выполнения операторов, например, чтобы сначала выполнился оператор or, и только затем and:

print(18 > 16 and (4 == 5 or 1 > 0))
# Вывод: True

 Логическое отрицание

Задача оператора not состоит в изменении исходного значения на противоположное. Так истинное значение становится ложным и наоборот:

print(not(True)) 
# Вывод: False

print(not(10 > 0))
 # Вывод: False

Конъюнкция: логическое умножение

Результат конъюнкции или логического умножения с помощью оператора and будет истинным лишь тогда, когда каждое объединяемое выражение истинно. Поэтому его также называют логическим «И»:

print(20 >= 18 and 20 <= 21) 
# Вывод: True

Процесс вычисления такого выражения происходит поэтапно:
1. Вычисляется значение первого операнда: 20 >= 18 (True).
2. Вычисляется значение второго операнда: 20 <= 21 (True).
3. Вычисляется значение полученного выражения: True and True = True.

Однако если бы в первом выражении мы бы получили False, то все следующие шаги были бы пропущены. Это называется ленивым вычислением, так как возвращается первый полученный False:

print(12 >= 18 and 12 <= 21) 
# Вывод: False

Дизъюнкция: логическое сложение

В отличии от конънкции результат дизъюнкции будет истинным, если истинно хотя бы одно из объединяемых выражений, поэтому её также называют логическим «ИЛИ»:

print(17 >= 18 or 27 <= 35) 
# Вывод: True

Такое выражение тоже вычисляется последовательно, пока не встретится первое истинное значение. После этого выражение возвращает True и дальнейшие вычисления не происходят.

Но если при вычислении значений всех выражений не было получено ни одного значения True, то будет возвращен False:

print(17 >= 18 or 17 <= 12) 
# Вывод: True
Задания для самопроверки

1. Какие из следующих объектов являются истинными?

n = 20
reply = ""
message = "Сегодня выпало много снега"
is_admin = False
count = 0
 
Ответ

2. Что будет выведено на экран в результате выполнения данного кода?

print(145 < -1)
print(89 != 19)
print("Сегодня солнечно" == "Сегодня солнечно")
print(91 >= -1)
print("Доступ разрешён" != "Доступ запрещён")
 
Ответ

3. Что будет выведено на экран в результате выполнения данного кода?

print(92 > 1 or "Кто ты" != "Кто я")
print(not(84 == 84))
print(23 > 1 and not(90) or 1 < -9)
print(10 != 23 or 1 > 2 and "Яблоко" == "Яблоко")
print(98 <= 100 and 12 != 98 and 78 > -1 and not(1 > 2))
 
Ответ

4. В каком порядке выполняются логические операции?

 
Ответ

5. Напишите программу, которая принимает на вход год рождения, и выводит на экран True или False в зависимости от того, лежит ли введённое значение в пределах от 2000 до 2004.

Пример входных данных Пример выходных данных
2004 True
2001 True
1990 False
 
Ответ
arrow_back_ios Назад
Дальше arrow_forward_ios

 💬 0 комментариев
person
email