Булева Логіка

../_images/george_boole.jpg

Джордж Буль створив те, що зараз відоме як булева алгебра, яка спирається на значення істина та хибність і визначає набір булевих операцій: not, and та or.

Ці булеві значення та оператори корисні у програмуванні, оскільки вони допомагають вам визначати порядок дій у ваших програмах.

Тип Python boolean є одним із вбудованих типів даних Python. Він використовується для представлення значення істинності виразу. Наприклад, вираз 1 < 2 є True (істина), тоді як вираз 0 == 1 є False (хибний). Розуміння того, як поводяться булеві значення у Python, є важливим для якісного програмування на Python.

Розуміння булевих функцій

Тип Boolean має лише два можливих значення:

  • True

  • False

Жодне інше значення не буде мати тип bool.

>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>

Тип bool є вбудованим, тобто він завжди доступний у Python. True та False є ключовими словами у Python і не можуть використовуватися як імена змінних, але тип bool не є таким, і можна зробити змінну bool, однак це вважається поганим стилем.

Булеві як числа

Булеві вирази є підтипом числового типу у Python. Це означає, що вони є числами за всіма ознаками. Іншими словами, до булевих типів можна застосовувати арифметичні операції, а також порівнювати їх з числами. Значення True розглядається як 1, а значення False розглядається як 0.

Існує не так багато застосувань числової природи булевих значень.

Перевірка істинності

Будь-який об’єкт можна перевірити на істинність. За замовчуванням об’єкт вважається True, якщо його клас не визначає іншого значення. Ось більшість вбудованих об’єктів, що мають значення False:

  • константні значення: None та False

  • нуль будь-якого числового типу: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)

  • порожні послідовності та колекції: '', [], (), {}, set(), range(0).

Підказка

Якщо len(something) дорівнює 0, то something приводиться до bool як False.

Логічне порівняння

У мові Python передбачено 3 логічних оператори:

Оператор

Логічний оператор

not

Заперечення

and

Кон’юнкція

or

Диз’юнкція

За допомогою цих операторів ви можете створювати вирази, з’єднуючи булеві вирази один з одним. Ці оператори є ключовими словами мови, тому ви не можете використовувати їх як ідентифікатори, не викликавши SyntaxError.

Початок роботи з оператором not

Оператор not - це булевий або логічний оператор, який реалізує заперечення у Python. Він є унарним, що означає, що він приймає лише один операнд. Операндом може бути булевий вираз або будь-який об’єкт Python. Завдання not полягає в тому, щоб змінити значення істинності свого операнда на протилежне.

таблиця істинності оператора not

операнд

not операнд

True

False

False

True

Ця функціональність робить його корисним у кількох ситуаціях:

  • Перевірка невиконання умов у контексті операторів if та циклів while

  • Інвертування значення істинності об’єкта або виразу

  • Перевірка, чи значення не знаходиться у заданому контейнері

  • Перевірка ідентичності об’єкта

Початок роботи з оператором and

Оператор and у мові Python є двійковим, що означає, що він приймає два операнди. Операнди у виразі and зазвичай називають умовами. Результат оператора залежить від значень істинності його операндів. Результат буде True, якщо обоє є істинними.

таблиця істинності оператора and

operand_1

operand_2

operand_1 and operand_2

True

True

True

False

False

False

True

False

False

False

True

False

and працює не тільки з операндами булевого типу. Ось алгоритм:

  • обчислити 1-й операнд; повернути його, якщо він False і завершити

  • обчислити 2-й операнд; повернути його, якщо він False і завершити

  • повернути 2-й операнд

>>> 1 and 5
5
>>> '' and None
''
>>> 0 and True
0
>>> 5 and False
False

Початок роботи з оператором or

За допомогою булевого оператора or ви можете об’єднати два булевих вирази в один складений вираз. Це робить or бінарним оператором. Принаймні один з підвиразів має бути True, щоб складений вираз вважався True, і не має значення, який саме. Якщо обидва під-вирази мають значення False, то вираз буде вважатися False.

таблиця істинності оператора or

operand_1

operand_2

operand_1 or operand_2

True

True

True

False

False

False

True

False

True

False

True

True

or працює не тільки з операндами булевого типу. Ось алгоритм:

  • обчислити 1-й операнд; повернути його, якщо він True і завершити

  • обчислити 2-й операнд; повернути його, якщо він True і завершити

  • повернути 2-й операнд

>>> 42 or True
42
>>> None or []
[]
>>> 0 or True
True
>>> [[]] or ''
[[]]

Порівняння

У мові Python існує вісім операцій порівняння. Всі вони мають однаковий пріоритет (вищий, ніж у булевих операцій).

Оператори порівняння

Оператор

Значення

<

строго менше, ніж

<=

менше або дорівнює

>

строго більше, ніж

>=

більше або дорівнює

==

дорівнює (також відоме як equality порівняння)

!=

не дорівнює

is

ідентичність об’єктів

is not

заперечення ідентичності об’єкта

Кожен з цих операторів порівняння повертає булеве значення, завжди True або False.

Ви можете з’єднувати оператори порівняння ланцюжком: x < y < z еквівалентне x < y and y < z.

Рівність та Ідентичність

Зрозуміти різницю між ними простіше, задавши питання, на яке відповідає кожна з них.

Питання для == (рівності) полягає у наступному:

Чи є об’єкт зліва рівним об’єкту справа

Питання для is (ідентичність) полягає в наступному:

Чи є об’єкт ліворуч тим самим, як і об’єкт праворуч

Наприклад, якщо перед вами стоять два автомобілі однієї моделі, одного кольору і т.д. - ці автомобілі рівні, але вони не ідентичні один одному. Але якщо вам показують дві фотографії однієї і тієї ж машини, ви розумієте, що машини на цих фотографіях - це один і той же об’єкт.