← Назад к вопросам

Какие знаешь логические операции в Python?

1.0 Junior🔥 121 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Какие знаешь логические операции в Python?

В Python есть три основных логических оператора, которые работают с булевыми значениями. Это фундамент управления потоком выполнения программы.

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

Возвращает True, если оба значения истинны. Если первое значение ложь, второе не вычисляется (short-circuit evaluation).

# Базовое использование
print(True and True)    # True
print(True and False)   # False
print(False and True)   # False
print(False and False)  # False

# С переменными
age = 25
has_license = True

if age >= 18 and has_license:
    print("Вы можете водить машину")
else:
    print("Недостаточно условий")  # Печатает это

# Важно: AND возвращает не True/False, а само значение!
result = 5 and 10
print(result)  # 10 (последнее значение, так как оба истинны)

result = 0 and 10
print(result)  # 0 (первое ложное значение)

result = 5 and 0 and 10
print(result)  # 0 (первое встреченное ложное)

Short-circuit evaluation (ленивое вычисление):

def expensive_check():
    print("Это работает!")
    return True

# Если первое ложь, второе не вычисляется
if False and expensive_check():
    pass
# Output: ничего не печатает (expensive_check не вызывался)

# Если первое истина, второе вычисляется
if True and expensive_check():
    pass
# Output: "Это работает!"

2. Оператор OR (логическое ИЛИ)

Возвращает True, если хотя бы одно значение истинно. Если первое истина, второе не вычисляется.

# Базовое использование
print(True or False)   # True
print(False or True)   # True
print(False or False)  # False
print(True or True)    # True

# С переменными
is_admin = False
is_moderator = True

if is_admin or is_moderator:
    print("Вы имеете права доступа")  # Печатает это
else:
    print("Доступ запрещен")

# OR возвращает первое истинное значение или последнее ложное
result = None or False or 5 or 10
print(result)  # 5 (первое истинное)

result = None or False or 0
print(result)  # 0 (последнее, так как все ложные)

result = "" or None or "default"
print(result)  # "default" (первое истинное)

Практический пример: логика по умолчанию

# Используем OR для установки дефолтных значений
user_name = input("Введите имя: ") or "Anonymous"
print(f"Привет, {user_name}")

# Если пользователь нажимает Enter (пустая строка), используется "Anonymous"

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

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

# Базовое использование
print(not True)      # False
print(not False)     # True
print(not 0)         # True (0 ложно)
print(not 1)         # False (1 истинно)
print(not "")        # True (пустая строка ложна)
print(not "hello")   # False (непустая строка истинна)

# С переменными
is_logged_in = False

if not is_logged_in:
    print("Пожалуйста, залогиньтесь")  # Печатает это
else:
    print("Вы уже залогинены")

# Двойное отрицание
x = True
print(not not x)  # True
print(bool(x))    # Лучший способ преобразовать в bool

Сравнительная таблица истинности

ABA and BA or Bnot A
TTTTF
TFFTF
FTFTT
FFFFT

Сочетание логических операторов

# Комбинированная логика
age = 25
has_license = True
has_car = False

# Условие: возраст >= 18 И (есть права ИЛИ есть машина)
if age >= 18 and (has_license or has_car):
    print("Можете ездить")
else:
    print("Нельзя ездить")

# Скобки важны!
# a and b or c вычисляется как (a and b) or c
# a or b and c вычисляется как a or (b and c)

# Приоритет операторов: NOT > AND > OR
result = not True and False or True
# Вычисляется как: ((not True) and False) or True
# = (False and False) or True
# = False or True
# = True

Истинные и ложные значения (Truthy vs Falsy)

В Python любое значение может быть использовано в логическом контексте:

Ложные (Falsy) значения:

falsy_values = [
    False,           # Булево False
    None,            # Отсутствие значения
    0,               # Числовой ноль
    0.0,             # Ноль в виде float
    "",              # Пустая строка
    [],              # Пустой список
    {},              # Пустой словарь
    set(),           # Пустое множество
    (),              # Пустой кортеж
]

for value in falsy_values:
    if not value:
        print(f"{repr(value)} is falsy")

Истинные (Truthy) значения:

truthy_values = [
    True,            # Булево True
    1,               # Любое число ≠ 0
    "hello",         # Непустая строка
    [1, 2, 3],       # Непустой список
    {"a": 1},        # Непустой словарь
    (1,),            # Непустой кортеж
]

for value in truthy_values:
    if value:
        print(f"{repr(value)} is truthy")

Практические паттерны

1. Проверка наличия:

# ❌ Плохо
if user is not None:
    process_user(user)

# ✅ Хорошо (яснее)
if user:
    process_user(user)

2. Дефолтные значения:

# ❌ Плохо
if name is None:
    name = "Guest"

# ✅ Хорошо (однострочник)
name = name or "Guest"

# ✅ Еще лучше (для Python 3.8+)
name = name or "Guest"
email = user.get("email") or "unknown@example.com"

3. Взаимоисключающие условия:

# ❌ Плохо
if not (is_active and is_approved):
    return False

# ✅ Хорошо (De Morgan's Law)
if not is_active or not is_approved:
    return False

4. Цепочка проверок:

# Проверяем условия по порядку (short-circuit evaluation)
def validate_user(user):
    if not user or not user.get("email") or not user.get("age"):
        return False
    
    # Все проверки пройдены
    return True

Частые ошибки

# ❌ Ошибка 1: неправильное использование AND/OR
users = [1, 2, 3]
if users and len(users) > 0:  # Избыточно
    print("Users exist")

# ✅ Правильно
if users:
    print("Users exist")

# ❌ Ошибка 2: забыли скобки
if age > 18 and has_license or has_car:
# Вычисляется как: (age > 18 and has_license) or has_car
# Может быть не то, что вы хотели!

# ✅ Правильно (явные скобки)
if age > 18 and (has_license or has_car):
    pass

# ❌ Ошибка 3: тройное условие
if not a or not b or not c:
    # Лучше использовать any/all

# ✅ Правильно (более читаемо)
if not any([a, b, c]):  # Если хотя бы один False
    pass

if all([a, b, c]):  # Если все True
    pass

Встроенные функции all() и any()

# all() — все элементы истинны
print(all([True, True, True]))    # True
print(all([True, False, True]))   # False
print(all([]))                    # True (пустой список считается True!)

# any() — хотя бы один элемент истинен
print(any([False, False, True]))  # True
print(any([False, False, False])) # False
print(any([]))                    # False (пустой список считается False)

# Практический пример
errors = []
if any(errors):  # Если есть ошибки
    print("Validation failed")
else:
    print("All good")
Какие знаешь логические операции в Python? | PrepBro