Найти в Дзене
Герман Геншин

Булева логика в Python без купюр: шокирующие ошибки, которые делают все новички

Оглавление

Булева логика — это основа для принятия решений в математике, программировании и инженерии. Во многих языках для нее выделен свой отдельный тип данных. Но если вы только открываете для себя Python, работа с булевыми значениями может сбить с толку. Давайте разберёмся вместе: что такое True и False в Python на самом деле?

Основы булевой логики: проще некуда

Без булевой логики не обходится ни одна программа — ведь принятие решений строится именно на ней. В её основе всегда только один вопрос: истина это или ложь?

Ещё в XIX веке математик Джордж Буль ввел простую идею: есть только два состояния — правда и неправда. На этом, собственно, и держится вся работа компьютеров, ведь внутри они постоянно оперируют только 1 и 0, включено или выключено.

Примеры булевой логики легко найти повсюду: лампочка может быть включена или выключена, дверь — заперта или открыта, погода — солнечная или нет. Все это примеры булевых переменных из реальной жизни.

В программировании булева логика отвечает за то, чтобы компьютер мог сам принимать решения: правильно ли введён пароль, успешна ли оплата, обновилась ли программа, попал ли игрок в цель, и так далее. Если бы не было булевых значений, программы бы просто по кругу перебирали данные — а с ними ход событий меняется в зависимости от ситуации.

Как выглядит булево значение в Python

Когда вы поняли суть булевой логики, пора увидеть, как это реализовано в Python. Здесь для таких значений есть два зарезервированных слова:

Важный момент: писать их нужно строго с заглавной буквы. Если написать true или false с маленькой буквы, Python подумает, что вы имеете в виду переменную, и выдаст ошибку. Оба значения — True и False — имеют встроенный тип bool:

Забавный факт: bool — это наследник класса int. Поэтому булевы значения иногда ведут себя как числа — True это 1, а False — 0:

-2

Это иногда бывает удобно, но может путать. Так что лучше воспринимать булевы значения именно как логические, а не как числа.

Преобразовать любое значение в булево просто — с помощью функции bool(). Вот тут появляется понятие "истинных" и "ложных" значений. В Python к ложным (False) относятся:

Всё, что не попало в этот список, — истинно (True.)

Логические операторы: сравнения на практике

В Python всего два булевых значения: True и False. Как же их использовать на деле? Самое интересное — в логических операторах. Они помогают сравнивать значения, проверять условия и ставить "да-нет" вопросы в коде.

Операторы сравнения

С помощью операторов сравнения можно узнать, равны ли два значения. Результат такого сравнения — всегда True или False. Вот с какими операторами сравнения чаще всего работают в Python:

Оператор

Значение

==

Равно

!=

Не равно

>

Больше

<

Меньше

>=

Больше или равно

<=

Меньше или равно

Давайте посмотрим на примерах:

Работают такие сравнения не только для чисел — строки и другие типы данных подходят тоже:

-3

Операторы идентичности

Если обычное сравнение выясняет, равны ли значения, то операторы идентичности дают понять, являются ли переменные одним и тем же объектом в памяти. В Python их два:

Оператор

Значение

is

Вернет True, если оба указывают на один объект

is not

Вернет True, если это разные объекты

Пример:

-4

В этом примере a и b — это буквально один и тот же список. А вот a и c хоть и выглядят одинаково, хранятся в памяти отдельно, поэтому результат False.

Операторы принадлежности

Они нужны, чтобы проверить: есть ли элемент в последовательности или коллекции. Если есть — возвращается True, если нет — False. Благодаря этому не нужно писать лишние проверки или длинные циклы.

Оператор

Значение

in

Вернет True, если элемент найден

not in

Вернет True, если элемента нет

Посмотрим на примере со строками:

Оператор in работает как для подстрок, так и для отдельных символов. То же — с другими коллекциями:

-5

Так удобнее всего понять, есть ли нужный элемент в списке или другой коллекции.

Булева логика в условиях и циклах

Булевы переменные — не абстракция, а главный инструмент управления работой вашей программы. Каждый раз, когда нужно выполнить что-то по условию или повторять действие, используется булева логика. Обычно это два вида конструкций:

Давайте разберёмся подробнее.

Условия (if, elif, else)

Условные конструкции решают, какой фрагмент кода выполнить, в зависимости от того, истинно условие или нет (True или False). Например:

Python сравнивает age >= 18. Если условие True, выполняется вложенный блок. Если False — этот участок кода пропускается. В примере 20 >= 18 даёт True, и на экран выводится сообщение. Если хотите предусмотреть вариант для False, используйте else, а если условий несколько — elif.

-6

Python идёт сверху вниз и выполнит только первое условие, которое окажется True. Это и есть тот самый выбор пути внутри кода.

Циклы

Циклы используют булеву логику, чтобы понять — пора ли остановиться или еще повторять действие. Особенно это заметно в while.

Python проверяет count < 3. Пока условие True, цикл крутится. После каждой итерации идет новая проверка. Как только станет False — цикл завершится. Если условие изначально True, получится бесконечный цикл.

-7

В этом примере условие True делает цикл бесконечным, но через command == "exit" можно выйти из него вручную. В циклах for булева логика работает "за кадром": каждый проход — это вопрос "есть ли еще элемент в коллекции?". Если есть — продолжаем, нет — цикл завершён. Всё это — результат работы булевой логики.

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

Частые ошибки с булевой логикой, которых легко избежать

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

Путаница между is и ==

== сравнивает значения (содержимое переменных). А is — идентичность (являются ли это вообще одним и тем же объектом). Для сравнения данных всегда берите ==, оператор is используйте только для проверки уникальности объекта.

Думаете, bool() всегда ведет себя очевидно?

bool() преобразует значение в True или False по принципу "пустое или нет". Часто новички думают, что bool("False") даст False, но Python считает истинной любую непустую строку! Только "", то есть пустая строка, превращается в False.

Забыли про порядок операторов?

Порядок работы булевых операторов в Python особенный. К примеру:

Может показаться, что речь о not (a == 5) (результат False). На самом деле Python видит (not a) == 5. А not a даст False, и в итоге сравнивается False == 5. Чтобы избежать ошибок, при комбинации булевых и других операторов всегда используйте скобки!

-8

Теперь вы знаете главные хитрости и ловушки булевой логики в Python. Применяйте знания на практике — так вы быстро запомните все нюансы! Не бойтесь пробовать и экспериментировать — только так можно действительно освоить булеву логику в программировании.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: