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

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

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

К примеру, выражение 4 > 5 является логическим, так как его конечный результат заключается в истинности или ложности. 4 + 5 не причисляют к логическим, потому что оно возвращает числовое значение.

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

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

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

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

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

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

>>> bool(3.4)
True
>>> bool(-150)
True
>>> bool(0)
False
>>> bool(' ')
True
>>> bool('')
False

Это основывается на правиле: все, кроме 0 и пустоты, считается правдой.

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

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

Не приводите к путанице операцию присваивания значения переменной, обозначаемую в Python одиночным знаком "равно", с операцией сравнения (двойной знак "равно"). Присваивание и сравнение выполняют разные функции.

>>> a = 10
>>> b = 5
>>> a + b > 14
True
>>> a < 14 - b
False
>>> a <= b + 5
True
>>> a != b
True
>>> a == b
False
>>> c = a == b
>>> a, b, c
(10, 5, False)

В данном примере выражение c = a == b состоит из двух этапов. Сначала осуществляется сравнение (==) значений a и b. Затем результат этого сравнения присваивается переменной c. Выполнение оператора a, b, c просто демонстрирует их значения.

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

Логические выражения, такие как kByte >= 1023, считаются простыми, поскольку содержат лишь одну логическую операцию. Однако часто возникает потребность в более сложных выражениях, чтобы получить ответ "да" или "нет" на основе выполнения нескольких простых оценок. Такие, как: "на улице идет снег или дождь", "переменная news больше 12 и меньше 20".

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

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

Для получения True с оператором or достаточно, чтобы хотя бы одно из простых выражений было правдой. Все сложное выражение станет ложным, только если оба простых выражения ложны.

Допустим, переменная x получила значение 8 (x = 8), а переменная y — 13 (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

Если бы мы сформировали другое выражение: x > 8 and y < 15, итог также был бы False. Однако, второе сравнение y < 15 не было бы проведено интерпретатором, так как его выполнение излишне. Причина: первое простое логическое выражение (x > 8) вернуло ложь, которая делает все выражение ложным.

В случае с оператором or второе простое выражение проверяется только если первое вернуло ложь; если первое вернуло истину, второе не проверяется. Достаточно одного True для истинности всего выражения, не важно, по какую сторону от or оно стоит.

>>> y < 15 or x > 8
True

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

>>> not y < 15
False

Здесь y < 15 возвращает True, но отрицание посредством not делает его False.

>>> a = 5
>>> b = 0
>>> not a
False
>>> not b
True

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

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

  1. Присвойте двум переменным любые числовые значения.
  2. Используя переменные из шага 1, при помощи оператора and составьте два сложных логических выражения: одно должно возвращать истину, другое — ложь.
  3. Повторите шаг 2, но уже применяя оператор or.
  4. Например, попробуйте работать с переменными строкового типа в логических выражениях и объясните вывод программы.
  5. Напишите программу, которая запрашивает у пользователя два числа и выводит True или False в зависимости от того, больше ли первое число второго.

Вопросы для самопроверки:

  1. Какое значение имеет логический тип данных и как его обозначают в Python?
  2. Какое булевое значение присваивается пустой строке и числу 0 при преобразовании их к логическому типу?
  3. Какие логические операторы существуют в Python для объединения простых выражений?
  4. Как ведет себя оператор and при объединении двух простых логических выражений?
  5. Какие условия необходимы для получения результата True с оператором or?
  6. Объясни отличие операции присваивания от операции сравнения в Python.

Программа курса:

  1. Описание курса
  2. Эволюция и основы языков программирования

    История программирования в кратком и понятном изложении. Что такое машинный язык, почему появились ассемблеры, языки высокого уровня и объектно-ориентированные. Зачем нужен транслятор, и почему он может быть либо компилятором, либо интерпретатором.

  3. Знакомство с основами Python

    Особенности языка Python, работа в интерактивном режиме и подготовка файлов с исходным кодом.

  4. Типы данных и переменные в Python

    Базовые типы данных в Python: целое, вещественное числа, строки. Изменение типа данных с помощью встроенных функций. Понятие об операциях и переменных. Присваивание значения переменной.

  5. Ввод и вывод данных с Python функциями

    Для вывода на экран в Python 3.x используется функция print(). Вывод может быть предварительно отформатирован. Для ввода данных с клавиатуры используется функция input(), которая возвращает в программу строку.

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

    Логические выражения. Логические операторы языка Python: == (равно), != (не равно), (больше), = (больше или равно), and (логическое И), or (логическое ИЛИ), not (отрицание).

  7. Ветвление и условные операторы в Python

    Управление потоком программы с помощью операторов if-else. Создание логических ветвлений, обработка условий и выполнение разных блоков кода в Python.

  8. Изучите обработку ошибок и исключений в Python

    Общее представление об ошибках и исключениях в языке программирования Python. SyntaxError, NameError, TypeError, ValueError, ZeroDivisionError. Обработка исключений с помощью инструкции try-except.

  9. Множественное ветвление с if-elif-else в Python

    Оператор множественного ветвления языка Python позволяет организовать более двух веток выполнения программы без необходимости вложения условных операторов друг в друга. Конструкция включает одну ветку if, произвольное количество elif и необязательную ветку else.

  10. Цикл while и его применение в Python

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

  11. Изучите функции и их применение в Python

    Функции - важный элемент структурного программирования. Они позволяют обособить участок кода, выполняющий определенную задачу. В дальнейшем к нему можно обращаться из разных мест программы по имени, которым он назван. В языке Python функции определяются с помощью оператора def.

  12. Локальные и глобальные переменные в Python

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

  13. Оператор return и возврат значений в Python

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

  14. Параметры и аргументы функций в Python

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

  15. Встроенные функции Python для работы

    Язык программирования Python включает множество встроенных функций. В предыдущих уроках мы использовали такие функции как print() и input(), а также функции преобразования типов данных. В этом уроке рассматриваются встроенные функции для работы с символами и числами.

  16. Использование модулей в Python

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

  17. Генерация псевдослучайных чисел в Python

    Для генерации псевдослучайных чисел в языке программирования Python используются функции модуля random. Функция random() генерирует вещественное число от 0 до 1. Функции randint() и randrange() производят целые псевдослучайные числа в указанных диапазонах.

  18. Изучение списков в Python - основы и операции

    Списки в Python - это аналог массивов в других языках программирования. Однако список может содержать элементы разных типов. В терминологии Python список - это изменяемая упорядоченная структура данных. Можно заменять его элементы, добавлять и удалять их, брать срезы. В язык встроены методы для работы со списками.

  19. Изучение цикла for в Python

    Цикл for в языке программирования Python предназначен для перебора элементов структур данных (списков, словарей, кортежей, множеств) и многих других объектов. Это не цикл со счетчиком, каковым является for во многих других языках. Нередко цикл for используется совместно с функцией range(), генерирующей объекты-диапазоны.

  20. Строки в Python - методы и срезы

    В Python строки - это неизменяемые последовательности символов или подстрок. Из них, так же как из списков, можно извлекать отдельные символы с помощью индексов или подстроки с помощью взятия срезов. В языке Python есть множество встроенных строковых методов, позволяющих упростить обработку строк.

  21. Кортежи - неизменяемые структуры данных

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

  22. Словари в Python - работа с ключами и значениями

    Словарь в Python - это изменяемая неупорядоченная структура данных, элементами которой являются пары "ключ:значение". В словари можно добавлять и удалять элементы, изменять значения ключей. В Python словари имеют ряд методов, упрощающих работу с ними.

  23. Работа с файлами в Python

    В языке программирования Python открытие файлов выполняется с помощью функции open(), которой передается два аргумента - имя файла и режим. Файл может быть открыт в режиме чтения, записи, добавления. Также может быть указан тип файла - текстовый или бинарный. Для файлов есть ряд встроенных методов чтения, записи и др.