3.1. Логический тип данных
|
| Операции | Python |
| Равно (=) | == |
| Не равно (≠) | != |
| Больше (>) | > |
| Меньше (<) | < |
| Больше или равно (≥) | >= |
| Меньше или равно (≤) | <= |
Логическое выражение — это выражение, принимающее одно из двух значений: True или False (пример 3.1).
Логические выражения можно присваивать переменным. Их значения выводятся на экран как False или True.
Пример 3.2. Написать программу, которая выведет на экран значение True или False в зависимости от того, является ли введенное число x четным или нет.
Этапы выполнения задания
I. Исходные данные: x (введенное число).
II. Результат: a (True или False).
III. Алгоритм решения задачи:
1. Ввод исходных данных.
2. Вычисление значения логической переменной. Число является четным, если остаток от деления его на 2 равен нулю. Значение переменной a определяется значением выражения x % 2 == 0.
3. Вывод результата.
IV. Описание переменных: x – int.
3.2. Составные условия
С высказываниями можно производить логические операции (НЕ, И, ИЛИ). Для логических переменных также определены логические операции, соответствующие операциям над высказываниями: not, and, or.
| Логические выражения, в которых наряду с простыми условиями (сравнениями) используются логические операции, называют составным условиями. |
Приведем таблицы истинности логических операций.
Операции A and B и A or B в Python относят к операциям сокращенного вычисления, поскольку значение B проверяется не всегда. Для операции and значение B не проверяется, если A имеет значение False. Для операции or значение B не проверяется, если A имеет значение True. Другими словами результат операций and и or всегда совпадает с одним из значений A или B (пример 3.3).
В логических выражениях могут встречаться как арифметические операции, так и логические. Порядок выполнения операций определяется их приоритетом. Операции с одинаковым приоритетом выполняются по порядку, слева направо. Для изменения порядка выполнения операций применяют скобки (примеры 3.4 и 3.5).
Приоритет операций:
- **;
- *, /, //, %;
- +, –;
- ==, !=, <, >, <=, >=;
- not;
- and;
- or.
При составлении программ часто нужно строить отрицания сложным логическим выражениям. Для этого полезно использовать тождества, известные из алгебры логики:
not not a = a;
not (a and b) = (not a) or (not b);
not (a or b) = (not a) and (not b).
Также для построения отрицаний полезна следующая таблица:
Пример 3.6. Написать программу, которая выдаст на экран значение True или False, в зависимости от того, находится ли число b между числами a и c.
Этапы выполнения задания.
I. Исходные данные: переменные a, b, c (вводимые числа).
II. Результат: rez (True или False).
III. Алгоритм решения задачи:
1. Ввод исходных данных.
2. Вычисление значения логической переменной. Рассмотрим два случая:
1) верно неравенство: a < b < c. Присвоим r1 значение этого выражения;
2) верно неравенство: a > b > c. Присвоим r2 значение этого выражения;
Ответом на задачу будет значение логического выражения r1 or r2.
3. Вывод результата.
IV. Описание переменных: a, b, c – int, r1, r2, rez – bool.
При составлении программы примера 3.6 использовались двойные неравенства: a < b < c и a > b > c. Результат работы программы не изменится, если их заменить составными условиями: a < b and b < c и a > b and b > c.
| Тип bool назван в честь английского математика и логика Джорджа Буля, занимавшегося в XIX в. вопросами математической логики. Логический тип данных появился в языках программирования в конце 1950-х — начале 1960-х гг. Первым внедрением считается язык ALGOL 60. Сейчас этот фундаментальный тип данных присутствует почти во всех языках программирования. В некоторых языках (Pascal, Java, JS) логический тип имеет название boolean. |
Пример 3.1. Примеры логических
выражений:
- 3 < 7 – логическое выражение, значение которого True.
- 2 + 2 * 2 == 8 – логическое выражение, значение которого False.
- abs(-5) > abs(3)– логическое выражение, значение которого True.
- y >= math.sqrt(x) – логическое выражение, значение которого можно определить только зная значения переменных x и y. При x = 9 и y = 3 значение выражения – True. При x = 10 и y = 2 – False.
Проверим истинность этих выражений в программе:
| from math import * a1 = 3 < 7 print(‘a1=‘, a1) a2 = 2 + 2 * 2 == 8 print(‘a2=‘, a2) a3 = abs(-5) > abs(3) print(‘a3=‘, a3) x = 9; y = 3 a4 = y >= sqrt(x) print(‘a4=‘, a4) x = 10; y = 2 a4 = y >= sqrt(x) print(‘a4=‘, a4) |
Результат работы программы:
| Условия для исполнителя являются частным случаем логических выражений. Поэтому при изучении алгебры логики вы фактически осваиваете математическую базу для создания команд цикла и ветвления, которые управляют формальным исполнителем. |
Пример 3.2.
Программа:
| x = int(input(«введи x = «)) a = x % 2 == 0 print(«Число«, x, «четное —«, a |
Тестирование
Запустить программу и ввести значение x = 4. Результат:
Запустить программу и ввести значения x = 11. Результат:
| По умолчанию False < True. Это неравенство следует из того факта, что значение False соответствует значению 0, а значение True — значению 1. Число можно преобразовать в логическое значение. Считается, что число, отличное от 0, имеет значение True, а число 0 имеет значение False. Для преобразования числа x в логическое значение используется функция bool(x). |
Пример 3.3. Операции or и and в Python.
| Если применять логические операции к числам, то результат не всегда очевиден. Согласно примеру3.3 если A = 5, B = -3, то значением выражения A and B будет число -3. |
Пример 3.4. Определение порядка действий для выражения (a, d – bool, c, b – int):
a or c < b and d :
Первым выполняется сравнение c и b, затем логическая операция and, потом – or.
Пример 3.5. Определение порядка действий для выражения (a, d – int, c, b – bool):
a <= (b and c) <= d
Первым выполняется действие в скобках – операция and. Значение этой операции для сравнения с числами интерпретируется как 1 (True) или 0 (False). Затем выполняются два сравнения (<=) в порядке их записи.
| Рассмотрим выражение not a or b с переменными а и b типа bool. Здесь операция not относится к переменной a, поскольку not обладает большим приоритетом, чем or. Поэтому сначала будет получено отрицание выражения a, а затем будет выполнена операция or. Для отрицания операции or выражение нужно записать так: not(a or b).Операция not имеет меньший приоритет чем операции сравнения, поэтому запись not a == b будет интерпретирована как not (a == b), а запись a == not b будет синтаксической ошибкой. Сравнить значение логической переменной a с результатом отрицания переменной b можно так: a == (not b). |
Пример 3.6
V. Программа:
| A = int(input(«Введи a = «)) B = int(input(«Введи b = «)) C = int(input(«Введи c = «)) r1 = A < B < C r2 = A > B > C rez = r1 or r2 print(«Число B между A и C — «, rez) |
Тестирование
Запустить программу и ввести значения A = 5, B = 0, С = -5. Результат:
Запустить программу и ввести значения A = -2, B = -7, С = 5. Результат:
Анализ результатов. Для полного тестирования программы нужно проверить все возможные случаи взаимного расположения A, B, C (их всего 6).
1. Что такое составное условие? 2. Назовите логические операции, используемые в Python. 3. Какой приоритет у логических операций по отношению к операциям сравнения? 4. Какой приоритет у логической операции not (and, or)?
Упражнения
1. Сформулируйте и реализуйте обратную задачу для примера 3.2: для всех тех случаев, для которых в исходной задаче вводилось True, нужно было бы вывести False и, наоборот, для всех тех случаев, в которых в исходной задаче получалось False, получить True.
2. Напишите программу, которая выведет на экран значение True или False, в зависимости от того, является ли введенное число x положительным или нет.
3. Напишите программу, которая выведет на экран значение True или False, в зависимости от того, является ли введенное число x четырехзначным или нет.
4. Определите, что делают следующие программы, и дополните команду вывода
5. *Заданы два положительных числа x и y. Определите, верно ли, что первое число меньше второго, и, хотя бы одно из них нечетное. Выведите на экран True или False.