Булевы выражения

Часто в реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: "Да, это правда". Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.

Подобные фразы предполагают только два возможных ответа - либо "да", когда выражение оценивается как правда, истина, либо "нет", когда утверждение оценивается как ошибочное, ложное. В программировании и математике если результатом вычисления выражения может быть лишь истина или ложь, то такое выражение называется логическим.

Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.

Мы уже знакомы с некоторыми типами данных - с целыми и вещественными числами, а также со строками. Теперь мы введем четвертый тип - логический тип данных (тип bool). Его также называют булевым. У этого типа всего два возможных значения: True (правда) и False (ложь).

Булева алгебра является алгеброй логики. Она имеет дело с переменными, которые могут иметь два значения: 0(False) или 1(True) и с операциями, которые имеют логическое значение.

Самый ранний метод манипулирования символической логикой был изобретен Джорджем Булем и впоследствии стал известен как Булева алгебра. В настоящее время булева алгебра стала незаменимым инструментом в области компьютерных наук.

Запустим Python и попробуем разобраться с логическим типом данных

>>> a = True
>>> type(a)
<class 'bool'>

>>> b = False
>>> type(b)
<class 'bool'>

Здесь переменной a было присвоено значение True, после чего с помощью встроенной в Python функции type() был проверен ее тип. Python сообщил, что это переменная типа bool. Переменная b также является булевой.

В программировании False обычно приравнивают к нулю, а True - к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу

>>> int(True)
1
>>> int(False)
0

Возможно и обратное. Можно преобразовать какое-либо значение к булевому типу

>>> bool(3.14)
True
>>> bool(-100)
True
>>> bool(0)
False
>>> bool(" ")
True
>>> bool("Привет!")
True
>>> bool("")
False

Здесь работает правило: все, что не 0 и не пустота, является правдой.

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

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

Простые логические операторы часто называют операторами сравнения. Рассмотрим операторы сравнения в Python

Оператор

Значение

<

меньше (строгое неравенство, 3 < 5 равно True)

<=

меньше либо равно (нестрогое неравенство, 3 < 5 равно True, 3 <= 3 равно True)

>

больше (строгое неравенство, 5 > 3 равно True)

>=

больше либо равно (нестрогое неравенство, 5 > 3 равно True, 5 >= 5 равно True)

==

равенство (3 == 3 равно True, 4 == 3 равно False)

!=

не равно (3 != 3 равно False, 4 != 3 равно True)

is

равно (используется для переменных и объектов)

is not

не равно (используется для переменных и объектов)

in

вхождение значения в последовательность (будет рассмотрено позже)

not in

не вхождение значения в последовательность (будет рассмотрено позже)

Приоритет операторов сравнения и арифметических операторов

Если расположить операторы сравнения в порядке убывания приоритета , то мы получим следующую картину

  • <. <=, >=, >

  • ==, !=, is, is not, in

  • not in

Важно! Арифметические операторы имеют приоритет выше, чем операторы сравнения.

Важно помнить и понять принципы выстраивания приоритета операций в языках программирования.

>>> 10 > 3 + 6
True

>>> a = 5
>>> a < 4 + 1
False

>>> 100 < 4 * 20 + 30
True

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

Сложные логические выражения

Логические выражения типа a >= 100 являются простыми, так как в них выполняется только одна логическая операция. Однако, на практике нередко возникает необходимость в более сложных выражениях. Может понадобится получить ответ "Да" или "Нет" в зависимости от результата выполнения двух простых выражений. Например, "на улице идет снег или дождь", "переменная news больше 12 и меньше 90".

В таких случаях используются специальные операторы, объединяющие два и более простых логических выражения. Широко используются два оператора - так называемые логические И (and) и ИЛИ (or).

Чтобы получить True при использовании оператора and, необходимо, чтобы результаты обоих простых выражений, которые связывает данный оператор, были истинными. Если хотя бы в одном случае результатом будет False, то и все выражение будет ложным.

Чтобы получить True при использовании оператора or, необходимо, чтобы результат хотя бы одного простого выражения, входящего в состав сложного, был истинным. В случае оператора or сложное выражение становится ложным лишь тогда, тогда ложны оба составляющие его простые выражения.

Допустим, x = 8 а y = 13. Логическое выражение y < 15 and x > 8 будет выполняться следующий образом. Сначала выполнится выражение y < 15. Его результатом будет True. Затем выполнится выражение x > 8. Его результатом будет False. Далее выражение сведется к True and False, что вернет False

>>> x = 8
>>> y = 13
>>> y < 15 and x > 8
False

В языке Python есть еще унарный оператор not, то есть отрицание. Он превращает правду в ложь, а ложь в правду. Унарный он потому, что применяется к одному выражению, стоящему после него, а не справа и слева от него как в случае бинарных and и or

>>> not y < 15
False

>>> a = 5
>>> b = 0

>>> not a
False
>>> not b
True

Число 5 трактуется как истина, отрицание дает ложь. Ноль приравнивается к False. Отрицание False дает True.

Расставим операторы сравнения и логические операторы в порядке убывания приоритета

  • <. <=, >=, >

  • ==, !=, is, is not, in

  • not in

  • not

  • and

  • or

Last updated