Булевы значения True/False: основы работы в Python

Раздел: Основы Python -> Логические операции

Булевы значения True и False в Python

Булевы значения (True и False) относятся к типу bool и являются подтипом целых чисел (True = 1, False = 0). Они используются для представления истинности или ложности выражений и лежат в основе всех логических операций и условных конструкций.

Самое распространённое применение булевых значений - результат операций сравнения (==, !=, <, > и т.д.) и логических операторов (and, or, not). Любое выражение, результат которого равен True или False, можно использовать в условии if или while.

a = 10
b = 5
print(a > b)  # True
print(a == b) # False

булевы значения python (булевы значения (true/false) в python)

True
False

1 и 1 в python примеры (примеры булевых операций в python)

Как узнать, является ли произвольное значение истинным (truthy) или ложным (falsy)?

В Python существует понятие «истинности» (truthy/falsy). Каждое значение в языке может быть приведено к логическому типу функцией bool(). Ложными считаются: None, False, нули числовых типов (0, 0.0, 0j), пустые коллекции ('' , [], {}, set(), range(0)) и объекты, у которых метод __bool__ или __len__ возвращает 0. Все остальные значения считаются истинными.

print(bool(0))        # False
print(bool(42))       # True
print(bool(''))       # False
print(bool('text'))   # True
print(bool([]))       # False
print(bool([1,2]))    # True
print(bool(None))     # False

таблица истинности python (таблица истинности в python)

False
True
False
True
False
True
False

Типичная ошибка: путаница между проверкой на равенство (==) и присваиванием (=). Если в условии if написать if x = 5 - будет ошибка синтаксиса. Также начинающие часто проверяют if x == True, хотя это избыточно - достаточно if x (если x - логическое значение или truthy/falsy).

Как использовать логические операторы and, or, not?

Оператор and возвращает первый ложный операнд или последний, если все истинны. or возвращает первый истинный операнд или последний, если все ложны. not возвращает противоположное булево значение (True ↔ False).

print(True and False)   # False
print(True or False)    # True
print(not True)         # False

# Короткое замыкание: and останавливается на ложном, or - на истинном
x = 0
y = 10
result = x and y  # x равен 0 (ложь), результат - 0
print(result)      # 0

result = x or y   # x ложь, проверяем y - 10 (истина), результат 10
print(result)     # 10
False
True
False
0
10

Проблема приоритетов: оператор or имеет более низкий приоритет, чем and. Например, a and b or c интерпретируется как (a and b) or c. Для ясности рекомендуется использовать скобки.

Как проверить равенство или неравенство без путаницы с присваиванием?

Используйте оператор == для равенства и != для неравенства. Никогда не путайте с одиночным =.

name = 'Alice'
if name == 'Alice':
    print('Привет, Алиса!')
else:
    print('Ты не Алиса')
Привет, Алиса!

Типичная ошибка: использование if name = 'Alice' - это присваивание, а не сравнение. Python 3 выдаст SyntaxError. В некоторых языках это разрешено, но в Python - нет.

Как использовать булевы значения для фильтрации списков?

Булевы значения часто применяются в списковых включениях (list comprehensions) и функции filter(). Условие после if определяет, какие элементы попадут в итоговый список.

numbers = [0, 1, 2, 3, 4, 5]
even = [n for n in numbers if n % 2 == 0]
print(even)  # [0, 2, 4]

# Использование filter:
odd = list(filter(lambda x: x % 2 != 0, numbers))
print(odd)   # [1, 3, 5]
[0, 2, 4]
[1, 3, 5]

Типичная ошибка: забыть преобразовать filter в список. Функция filter() возвращает итератор, а не список. Поэтому явно применяют list().

Расширенные примеры работы с булевыми значениями

1. Короткое замыкание при присваивании значения по умолчанию

Можно использовать or для установки значения по умолчанию, если переменная может быть ложной (например, None или 0).

Пример
user_input = None
# Если user_input ложно, возьмём 'гость'
name = user_input or 'гость'
print(name)  # гость

user_input = 'Анна'
name = user_input or 'гость'
print(name)  # Анна
гость
Анна

2. Проверка, что все элементы удовлетворяют условию (функция all)

all() возвращает True, если все элементы итерируемого объекта истинны (или объект пуст).

Пример
numbers = [2, 4, 6, 8]
all_even = all(num % 2 == 0 for num in numbers)
print(all_even)  # True

mixed = [2, 3, 4, 5]
all_even2 = all(num % 2 == 0 for num in mixed)
print(all_even2) # False
True
False

3. Проверка, что хотя бы один элемент удовлетворяет условию (функция any)

any() возвращает True, если хотя бы один элемент истинен.

Пример
numbers = [0, 0, 5, 0]
has_positive = any(num > 0 for num in numbers)
print(has_positive)  # True

all_zeros = [0, 0, 0]
has_positive2 = any(num > 0 for num in all_zeros)
print(has_positive2) # False
True
False

4. Цепочки сравнений

Python позволяет писать цепочки сравнений, которые работают как логическое И между всеми частями.

Пример
x = 5
print(1 < x < 10)  # True (эквивалентно 1 < x and x < 10)
print(5 == x == 5) # True
print(1 < x > 8)   # False (так как 1 < 5 True, но 5 > 8 False)
True
True
False

5. Тернарный оператор (условное выражение)

Позволяет выбрать одно из двух значений на основе булевого условия.

Пример
age = 20
status = 'взрослый' if age >= 18 else 'ребёнок'
print(status)  # взрослый

# Можно вкладывать, но лучше избегать
value = 'A' if age > 18 else ('B' if age == 18 else 'C')
print(value)   # A (т.к. 20>18)
взрослый
A

6. Использование булевых значений как индексов (редкий случай)

Поскольку True=1, False=0, их можно использовать как индексы для выбора одного из двух элементов.

Пример
options = ['неверно', 'верно']
result = options[True]  # эквивалентно options[1]
print(result)  # верно

# Можно использовать для выбора сообщения в зависимости от условия:
condition = 5 > 3
print(options[condition])  # верно
верно
верно

7. Определение логического значения для пользовательских классов

Можно переопределить метод __bool__ или __len__, чтобы объекты вели себя как truthy/falsy.

Пример
class MyList:
    def __init__(self, items):
        self.items = items
    def __len__(self):
        return len(self.items)
    # __bool__ можно не задавать, тогда используется __len__

obj1 = MyList([1,2,3])
obj2 = MyList([])
print(bool(obj1))  # True (len=3)
print(bool(obj2))  # False (len=0)
True
False

8. Проверка на None с помощью is

Для проверки на None следует использовать is None или is not None, а не ==. Это быстрее и является идиоматическим

Пример
value = None
if value is None:
    print('значение равно None')

if value is not None:
    print('значение не равно None')
else:
    print('значение равно None')
значение равно None
значение равно None

9. Использование all() и any() с генераторами для сложных проверок

Эффективная проверка свойств всех элементов без создания промежуточного списка.

Пример
data = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]
all_adults = all(person['age'] >= 18 for person in data)
print(all_adults)  # True

any_students = any(person['name'] == 'Student' for person in data)
print(any_students) # False
True
False

10. Булевы значения и оператор not

Оператор not преобразует операнд в bool и возвращает противоположное значение. Может использоваться для инвертирования условия.

Пример
is_active = False
if not is_active:
    print('неактивно')

# Инвертирование truthy/falsy:
value = ''
if not value:
    print('пустая строка считается false')
неактивно
пустая строка считается false

Булевы значения (True/False) в Python - comments

En
булевы значения python (python)