Логические данные в Python

Давайте погрузимся в мир логических данных в Python. Эта тема может казаться простой, но она невероятно важна — ведь именно с помощью логических значений ваши программы будут принимать решения! 🧠

Что такое логические данные? 🤔

В повседневной жизни мы часто задаем вопросы с ответами "да" или "нет".
Например: "Сегодня идет дождь?", "Вы любите пиццу?", "2 + 2 = 5?".

В 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 дает нам три основных логических оператора:

1. Оператор and (логическое И)

Возвращает True только если оба значения истинны:

Python 3.13
>>> sunny = True  # Солнечно
>>> warm = True   # Тепло

# Поеду на пляж, если солнечно И тепло
>>> going_to_beach = sunny and warm
>>> print(f"Солнечно: {sunny}, Тепло: {warm}")
>>> print(f"Идем на пляж? {going_to_beach}")
Солнечно: True, Тепло: True
Идем на пляж? True
# Что если погода изменится? >>> warm = False # Стало холодно >>> going_to_beach = sunny and warm >>> print(f"Солнечно: {sunny}, Тепло: {warm}") >>> print(f"Идем на пляж? {going_to_beach}")
Солнечно: True, Тепло: False
Идем на пляж? False

2. Оператор 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}")
>>> print(f"Купим телефон? {will_buy_phone}")
Телефон красивый: True, Телефон дешевый: False
Купим телефон? True

Таблица истинности для оператора or:

Python 3.13
>>> print("True or True =", True or True)
True or True = True
>>> print("True or False =", True or False)
True or False = True
>>> print("False or True =", False or True)
False or True = True
>>> print("False or False =", False or False)
False or False = False

3. Оператор 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
# Сравнение списков >>> 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

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

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

  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"\nШаг 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)

Теперь вы знаете, как работают логические данные в Python. Хотя они могут принимать всего два значения — True и False, их значение в программировании трудно переоценить.