Логические данные в 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)
>>> print("True or False =", True or False)
>>> print("False or True =", False or True)
>>> print("False or False =", False or False)
True or True = True
True or False = True
False or True = True
False or False = False

3. Оператор not (логическое НЕ)

Инвертирует значение: True становится False, и наоборот:

Python 3.13
>>> have_homework = True
>>> print(f"У меня есть домашнее задание: {have_homework}")
>>> print(f"У меня НЕТ домашнего задания: {not have_homework}")
У меня есть домашнее задание: True
У меня НЕТ домашнего задания: False
# Другой пример: если нет дождя, идем гулять >>> is_raining = False >>> going_for_a_walk = not is_raining >>> print(f"Идет дождь? {is_raining}") >>> print(f"Идем гулять? {going_for_a_walk}")
Идет дождь? False
Идем гулять? True

Сравнение значений 🔍

Логические значения часто появляются в результате сравнения:

Python 3.13
# Сравнение чисел
>>> my_age = 25
>>> friend_age = 30

>>> print(f"Мой возраст: {my_age}, возраст друга: {friend_age}")
>>> print(f"Наш возраст одинаковый? {my_age == friend_age}")
>>> print(f"Наш возраст разный? {my_age != friend_age}")
>>> print(f"Я младше? {my_age < friend_age}")
>>> print(f"Я старше? {my_age > friend_age}")
Мой возраст: 25, возраст друга: 30
Наш возраст одинаковый? False
Наш возраст разный? True
Я младше? True
Я старше? False
# Сравнение строк (по алфавиту) >>> print("Сравнение строк:") >>> print(f"'apple' < 'banana': {'apple' < 'banana'}") >>> print(f"'python' == 'Python': {'python' == 'Python'}")
Сравнение строк:
'apple' < 'banana': True
'python' == 'Python': False
# Сравнение списков >>> my_scores = [90, 85, 95] >>> friend_scores = [90, 85, 95] # Такой же список, но другой объект >>> same_list = my_scores # Тот же самый объект >>> print("Сравнение списков:") >>> print(f"Содержимое одинаковое? {my_scores == friend_scores}") >>> print(f"Это один и тот же объект? {my_scores is friend_scores}") >>> print(f"same_list это тот же объект что и my_scores? {my_scores is same_list}")
Сравнение списков:
Содержимое одинаковое? True
Это один и тот же объект? False
same_list это тот же объект что и my_scores? True

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

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

  1. not (самый высокий приоритет)
  2. and
  3. or (самый низкий приоритет)
Python 3.13
# Пример с приоритетами
>>> has_ticket = True
>>> has_passport = False
>>> has_visa = True

>>> print(f"Есть билет: {has_ticket}")
>>> print(f"Есть паспорт: {has_passport}")
>>> print(f"Есть виза: {has_visa}")

# Можно ли поехать за границу?
# Нужен билет И (паспорт ИЛИ виза)
>>> can_travel = has_ticket and (has_passport or has_visa)
>>> print("\nМожем поехать за границу?")
>>> print(f"has_ticket and (has_passport or has_visa) = {can_travel}")

# Разберем вычисление пошагово:
>>> step1 = has_passport or has_visa  # Сначала вычисляется выражение в скобках
>>> print(f"\nШаг 1: has_passport or has_visa = {step1}")

>>> step2 = has_ticket and step1  # Затем применяется оператор and
>>> print(f"Шаг 2: has_ticket and (результат шага 1) = {step2}")
Есть билет: True
Есть паспорт: False
Есть виза: True
Можем поехать за границу?
has_ticket and (has_passport or has_visa) = True
Шаг 1: has_passport or has_visa = True
Шаг 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
print(bool([1, 2]))   # 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("Привет, незнакомец!")

Практическое применение: где это используется? 🚀

1. Условные конструкции if-else

Python 3.13
>>> is_weekend = True
>>> weather_is_good = True

>>> print(f"Выходной: {is_weekend}")
>>> print(f"Хорошая погода: {weather_is_good}")

>>> if is_weekend and weather_is_good:
...     print("Идем в парк! 🌳")
... elif is_weekend:
...     print("Остаемся дома и смотрим фильм 🎬")
... else:
...     print("Надо работать 💻")
Выходной: True
Хорошая погода: True
Идем в парк! 🌳

2. Значения по умолчанию с использованием or

Python 3.13
>>> def greet(name=None):
...     # Если name не указано или пустое, используем "Гость"
...     actual_name = name or "Гость"
...     return f"Привет, {actual_name}!"

>>> print(greet("Мария"))  # Имя указано
>>> print(greet())         # Имя не указано
>>> print(greet(""))       # Пустая строка
Привет, Мария!
Привет, Гость!
Привет, Гость!

Проверка понимания 🎯

Давайте проверим, как вы усвоили материал:

Что вернет следующее выражение?

Python 3.13
result = (False or True) and not (False and True or True)

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


Мы с вами на связи
Русский