
Логические данные в Python
Когда программа решает, что делать дальше, выводить ли сообщение, пропустить ли пользователя, повторить ли запрос, она работает с логическими значениями. Тип bool в Python хранит ровно два значения: True и False, и из них собираются все условия и проверки.
Что такое логические данные?
В Python для значений «истина» и «ложь» существует специальный тип данных bool, который может принимать только два значения:
- True (истина)
- False (ложь)
Python 3.13# Создаём логические переменные >>> is_raining = True >>> likes_pizza = True >>> print(type(is_raining))<class 'bool'>
Важно: True и False всегда пишутся с большой буквы. Если написать true или false, Python не поймёт и выдаст ошибку.
Логические операторы
Часто нужно объединять несколько условий. Например: «поеду на пляж, если будет солнечно И тепло» или «куплю этот телефон, если он красивый ИЛИ недорогой». В Python для этого есть три оператора: and, or, not.
Оператор and (логическое И)
Возвращает True только если оба значения истинны:
Python 3.13>>> sunny = True >>> warm = True # Поеду на пляж, если солнечно И тепло >>> going_to_beach = sunny and warm >>> print(f"Солнечно: {sunny}, Тепло: {warm}")Солнечно: True, Тепло: True>>> print(f"Идем на пляж? {going_to_beach}")Идем на пляж? True# Что если погода изменится? >>> warm = False # Стало холодно >>> going_to_beach = sunny and warm >>> print(f"Солнечно: {sunny}, Тепло: {warm}")Солнечно: True, Тепло: False>>> print(f"Идем на пляж? {going_to_beach}")Идем на пляж? False
Оператор or (логическое ИЛИ)
Возвращает True, если хотя бы одно значение истинно:
Python 3.13>>> phone_is_beautiful = True >>> phone_is_cheap = False # Куплю телефон, если он красивый ИЛИ недорогой >>> will_buy_phone = phone_is_beautiful or phone_is_cheap >>> print(f"Телефон красивый: {phone_is_beautiful}, Телефон дешевый: {phone_is_cheap}")Телефон красивый: True, Телефон дешевый: False>>> print(f"Купим телефон? {will_buy_phone}")Купим телефон? True
Оператор not (логическое НЕ)
Инвертирует значение: True становится False, и наоборот:
Python 3.13>>> have_homework = True >>> print(f"У меня есть домашнее задание: {have_homework}")У меня есть домашнее задание: True>>> print(f"У меня НЕТ домашнего задания: {not have_homework}")У меня НЕТ домашнего задания: False
Сравнение значений
Логические значения часто появляются в результате сравнения:
Python 3.13# Сравнение чисел >>> my_age = 25 >>> friend_age = 30 >>> print(f"Мой возраст: {my_age}, возраст друга: {friend_age}")Мой возраст: 25, возраст друга: 30>>> print(f"Наш возраст одинаковый? {my_age == friend_age}")Наш возраст одинаковый? False>>> print(f"Наш возраст разный? {my_age != friend_age}")Наш возраст разный? True>>> print(f"Я младше? {my_age < friend_age}")Я младше? True# Сравнение строк (по алфавиту) >>> print(f"'apple' < 'banana': {'apple' < 'banana'}")'apple' < 'banana': True
Оператор is: сравнение по идентичности
Помимо == в Python есть оператор is. Они кажутся похожими, но проверяют разные вещи:
- == сравнивает значения (что у нас внутри)
- is сравнивает идентичность (это один и тот же объект в памяти или нет)
Python 3.13>>> my_scores = [90, 85, 95] >>> friend_scores = [90, 85, 95] # Такой же список, но другой объект >>> same_list = my_scores # Тот же самый объект >>> print(f"Содержимое одинаковое? {my_scores == friend_scores}")Содержимое одинаковое? True>>> print(f"Это один и тот же объект? {my_scores is friend_scores}")Это один и тот же объект? False>>> print(f"same_list это тот же объект что и my_scores? {my_scores is same_list}")same_list это тот же объект что и my_scores? True
Правило: в подавляющем большинстве случаев нужен ==. Оператор is уместен только для проверок на специальные синглтоны: is None, is True, is False. Применять is к числам, строкам, спискам почти всегда ошибка.
Приоритет операторов: что вычисляется первым?
Операторы выполняются в следующем порядке (от высшего к низшему):
- not (самый высокий приоритет)
- and
- or (самый низкий приоритет)
Python 3.13# Пример с приоритетами >>> has_ticket = True >>> has_passport = False >>> has_visa = True # Можно ли поехать за границу? # Нужен билет И (паспорт ИЛИ виза) >>> can_travel = has_ticket and (has_passport or has_visa) >>> print(f"has_ticket and (has_passport or has_visa) = {can_travel}")has_ticket and (has_passport or has_visa) = True# Разберем вычисление пошагово: >>> step1 = has_passport or has_visa # Сначала вычисляется выражение в скобках >>> print(f"Шаг 1: has_passport or has_visa = {step1}")Шаг 1: has_passport or has_visa = True>>> step2 = has_ticket and step1 # Затем применяется оператор and >>> print(f"Шаг 2: has_ticket and (результат шага 1) = {step2}")Шаг 2: has_ticket and (результат шага 1) = True
Совет: если сомневаетесь в порядке выполнения, используйте скобки. Они делают код более понятным и точно контролируют порядок вычислений.
Преобразование в логический тип: что считается истиной?
Функция bool
Python может преобразовать любое значение в логический тип:
Python 3.13>>> print(bool(100))True>>> print(bool(0))False>>> print(bool("Hello"))True>>> print(bool(""))False
Что считается истинным и ложным?
В Python большинство значений считаются истинными (True).
Ложными (False) считаются только:
- False (логическое «нет»)
- None (отсутствие значения)
- Нули: 0, 0.0, 0j
- Пустые контейнеры: "", (), [], {}
Python 3.13>>> money = 0 >>> if money: ... print("У меня есть деньги") ... else: ... print("Мой кошелек пуст")Мой кошелек пуст>>> name = "Алекс" >>> if name: ... print(f"Привет, {name}") ... else: ... print("Привет, незнакомец")Привет, Алекс
Проверка понимания
Давайте проверим, как вы усвоили материал:
Что вернет следующее выражение?
Python 3.13result = (False or True) and not (False and True or True)
