Логические данные в 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 к числам, строкам, спискам почти всегда ошибка.

Приоритет операторов: что вычисляется первым?

Операторы выполняются в следующем порядке (от высшего к низшему):

  1. not (самый высокий приоритет)
  2. and
  3. 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.13
result = (False or True) and not (False and True or True)