До настоящего момента мы писали программный код, выполняемый последовательно, без ответвлений. Для реализации ветвлений кода в языке существует логический тип данных — boolean. В этом уроке мы познакомимся с ним подробно.
Сравнение значений
Компьютеры видят наш мир в двоичной системе, сводя все к нолям и единицам. Истинное выражение представляется как единица, а ложное как ноль. Переменные типа boolean могут иметь только одно из двух значений True или False, то есть единицу или ноль, соответственно. Важно заметить, что значения пишутся с большой буквы.
Немного попрактикуемся:
1 2 3 4 5 6 | >>> 42 * True + False 42 >>> False * 2 - 3 -3 >>> True + 0.2 / True 1.2 |
Для сравнений значений True или False используется такая же логика, как и для сравнения любых значений. Используется стандартный набор операторов, называемых операторами сравнения, большинство из которых вам давно знакомы:
1. a > b —> a больше, чем b
2. a < b —> a меньше, чем b
3. a >= b —> a больше или равно b
4. a <= b —> a меньше или равно b
5. a != b —> a не равно b
6. a == b —> a равно b
Последние два, нуждаются в дополнительном объяснении. Проиллюстрируем оператор неравенства != следующим примером.
1 2 3 4 | >>> 1 != 2 True >>> 1 != 1 False |
В первом случае мы видим результат True, так как единица не равна двойке. Во втором показывается, что так, как единица равна единице, то логическое выражение является неверным и поэтому интерпретатор возвращает нам False.
Для проверки на равенство используется оператор == вместо более логичного = по причине того, что последний в программирование применяется для присваивания значений. Следующий пример продемонстрирует это различие:
1 2 3 4 5 6 7 | >>> a = 1 >>> b = 2 >>> a == b False >>> a = b >>> a == b True |
Сначала мы присваиваем переменным a и b два различных значения. После этого проверка на равенство переменных вернет нам False. Затем, мы присваиваем переменной a значение переменной b, теперь они обе равны двум и мы видим результат проверки равный True.
Мы можем сравнивать и строки. Оператор «меньше, чем» по отношению к строкам не несет никакого смысла, но мы можем проверять, являются ли строки одинаковыми.
1 2 3 4 5 6 | >>> "dog" == "cat" False >>> "dog" == "dog" True >>> "dog" != "cat" True |
Имейте в виду, что строки должны быть полностью одинаковы чтобы python вывел True при сравнении. Интерпретатор вернет False если в строках будет различаться регистр символов или в конце или начале строке будет присутствовать пробел.
Усложним логику
Python помимо вышеописанных логических операторов имеет в своем арсенале еще такие как and, or и not. Они представляют собой условия И, ИЛИ и НЕТ, соответственно.
Оператор and
Оператор and в логическом выражении говорит о том, что операнды по обе сторон от него должны быть истинны. Рассмотрим пример ниже.
1. У кошки четыре ноги.
2. У кошки есть хвост.
Скомбинируем эти фразы. «У кошки четыре ноги И у кошки есть хвост», целиком эта фраза является истинной. Если же мы будем отрицать первую ее половину «у кошки НЕ четыре ноги И у кошки есть хвост», то в целом эта фраза будет ложной. Фраза «у кошки НЕ четыре ноги И у кошки НЕТ хвоста» также будет ложной.
Попробуем оператор and на числовых выражениях:
1 2 3 4 5 6 7 8 | >>> 1 < 2 and 3 < 4 # оба истиннpythы True >>> 2 < 1 and 4 < 3 # оба ложны False >>> 1 < 2 and 4 < 3 # второе выражение ложно False >>> 2 < 1 and 3 < 4 # первое выражение ложно False |
Выведем из примеров выше правила:
True and True —> True
True and False —> False
False and True –> False
False and False —> False
Оператор or
Оператор логического ИЛИ возвращает истину когда хотя бы один из операндов является истинным. Если же оба операнда являются истинными то все выражение будет считать истинным. Приведем примеры использования оператора or:
1 2 3 4 5 6 7 8 | >>> 1 < 2 or 3 < 4 # оба истинны True >>> 2 < 1 or 4 < 3 # оба ложны False >>> 1 < 2 or 4 < 3 # second statement is False True >>> 2 < 1 or 3 < 4 # first statement is False True |
Обобщим это в правила:
True or True —> True
True or False —> True
False or True –> True
False or False —> False
Мы можем объединять условия and и or в одном выражении, при этом вышеописанные правила не нарушаются, а приоритет выставляется скобками:
1 2 3 4 | >>> False or (False and True) False >>> True and (False or True) True |
Оператор not
Последний логический оператор применяется для инвертирования логических выражений.
not True —> False
not False —> True
Применяя круглые скобки, мы можем использовать оператор отрицания в сложных выражениях.
1 2 3 4 | >>> (not False) or True True >>> False or (not False) True |
Мы можем комбинировать все логические операторы в сложных выражениях. Вот достаточно запутанный пример:
1 2 | >>> True and not (1 != 1) True |
Это выражение разбирается начиная с правой стороны:
1. Мы знаем, что выражение 1 == 1 истинно, поэтому…
2. 1 != 1 — ложно, далее… Выражение not (1 != 1) интерпретируется как «не ложь».
3. Не ложь — это истина.
4. True and not (1 != 1) можно перевести как «истина и истина».
5. Истина и истина — это True.
Мы рассмотрели логические операторы языка python. В следующих уроках, мы будем применять их в условном операторе if.