Логические выражения. Урок 4

Основы программирования на Python

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

Часто в реальной жизни мы соглашаемся или отрицаем то или иное утверждение, событие, факт. Например, "Сумма чисел 3 и 5 больше 7" является правдивым утверждением, а "Сумма чисел 3 и 5 меньше 7" - ложным. Можно заметить, что с точки зрения логики подобные фразы предполагают только два результата: "Да" (правда) и "Нет" (ложь). Подобное используется в программировании: если результатом вычисления выражения может быть лишь истина или ложь, то такое выражение называется логическим.

На прошлом уроке были описаны три типа данных: целые, дробные числа, а также строки. Также выделяют логический тип данных. У этого типа всего два возможных значения: True (правда) — 1 и False (ложь) — 0. Только эти значения могут быть результатом логических выражений.

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

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

Новыми для вас могут оказаться обозначение равенства: == (два знака "равно"); а также неравенства !=. Здесь следует обратить внимание на следующее: не путайте операцию присваивания, обозначаемую в языке Python одиночным знаком "равно", и операцию сравнения (два знака "равно"). Присваивание и сравнение — совершенно разные операции.

Примеры работы с логическими выражениями на языке программирования Python (после # написаны комментарии):

x = 125 # это не логическая операция, 
# а операция присваивания переменной x результата выражения 12 — 5
x == 4 # x равен 4
x == 7 # x равен 7
x != 7 # x не равен 7
x != 4 # x не равен 4
x  > 5 # x больше 5
x  < 5 # x меньше 5
x >= 6 # x больше или равен 6
x <= 6 # x меньше или равен 6

Определите устно результаты выполнения операций, приведенных в примере выше. Проверьте правильность ваших предположений, выполнив данные выражения с помощью интерпретатора языка Python.

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

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

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

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

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

Примеры работы со сложными логическими выражениями на языке программирования Python (после # написаны комментарии):

x = 8 
y = 13 
x == 8 and y < 15 #  x равен 8 и y меньше 15
x > 8 and y < 15 #  x больше 8 и y меньше 15
x != 0 or y >15 #  x не равен 0 или y больше 15
x < 0 or y >15 #  x меньше 0 или y больше 15

Определите устно результаты выполнения операций, приведенных в примере выше. Проверьте правильность ваших предположений, выполнив данные выражения с помощью интерпретатора языка Python.

Практическая работа

  1. Присвойте двум переменным любые числовые значения.
  2. Составьте четыре сложных логических выражения с помощью оператора and, два из которых должны давать истину, а два других - ложь.
  3. Аналогично выполните п. 2, но уже используя оператор or.
  4. Попробуйте использовать в сложных логических выражениях работу с переменными строкового типа.

Примерный результат выполнения практической работы

>>> num1 = 34
>>> num2 = 8.5
>>> num1 > 12 and num2 != 12
True
>>> num1 == 34 and num2 >= 8
True
>>> num1 != 34 and num2 != 12
False
>>> num1 <= 12 and num1 == 0
False
>>> num1 != 34 or num2 != 12
True
>>> num1 < 1 or num2 > 9.6
False
>>> str1 = "a"
>>> str2 = "b"
>>> str1 < "c" and str2 != "a"
True
>>> 

Исправьте.

В примере ошибка небольшая =)
x = 8
y = 13
x == 8 and y < 15 # x равен 8 и y меньше 15
x > 8 and y < 15 # x больше 8 и y меньше 15
x != 0 or y >15 # x не равен 0 или y меньше 15 --> тут у больше 15
x < 0 or y >15 # x меньше 0 или y меньше 15 --> тут у больше 15

спасибо, исправлено

спасибо, исправлено

Операторы and и or

Если оператор and применяется к числам, то результатом является значение последнего операнда, если же применяется оператор or, то результатом выполнения является значение первого операнда. Вопрос: какой алгоритм используется Python в данной ситуации?

>>> 2 and 4
4
>>> 2 and 4 and -5
-5
>>> 2 or -4 or 5
2

имеено тот, который вы

имеено тот, который вы описали

Отличаются ли чем-то операции

Отличаются ли чем-то операции and и &, or и | ?

Да, отличаются. Причем & и |

Да, отличаются. Причем & и | в разных языках программирования могут обозначать разное. Например, в Python знак & может обозначать пересечение множеств, а | - их объединение, а также по отношению к целым числам побитовые операции ИЛИ и И.

Побитовые (&, |) и логические (and, or) операторы - разные вещи.

Каким образом сравниваются

Каким образом сравниваются строковые переменные с целочисленными???

>>>х=5
>>>х1='vu'
#почему
>>>x>x1
True
#и какое должно быть значение текстовой переменной, 
#чтобы результат стал False?

Python v3 на попытку

Python v3 на попытку стравнения строки с числом выдает ошибку. Python v2 - нет. Возможно, это просто особенности языков.
Пустая строка всегда False. Однако как пустая строка оценивается при сравнении разных типов сказать не могу.

Стоило бы уточнить

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

>>> print False or 5
5

Насчет равенства и присвоения

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