Тип bool, сравнения и логические операторы в Python
Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе
Каждый день вы принимаете решения по принципу «да или нет». «Идёт ли дождь?» «Хватит ли мне денег?» «Правильный ли у меня пароль?» Компьютеры принимают такие же решения и используют для этого логические значения.
Логическое значение бывает либо True, либо False. И всё, только два варианта. Это как выключатель света: включено или выключено, да или нет, истина или ложь.
В этом уроке вы узнаете, как Python сравнивает значения, объединяет условия и решает, что считать «истиной», а что «ложью». Эти навыки лежат в основе каждой инструкции if и каждого цикла, которые вы когда-либо напишете.
Что такое логические значения в Python?
В Python есть встроенный тип данных bool. У него ровно два возможных значения: True и False. Обратите внимание на заглавные T и F, это важно.
True False <class 'bool'>
Имена логических переменных обычно начинаются с is_, has_ или can_, чтобы код читался как обычная английская фраза. Например, is_logged_in («вошёл ли пользователь») или has_permission («есть ли разрешение») точно говорят, что означает переменная.
Как сравнивать значения в Python
Большинство логических значений появляется не оттого, что кто-то напечатал True или False. Они получаются в результате сравнений. Когда вы сравниваете два значения, Python возвращает логическое значение.
Представьте оператор сравнения в роли судьи на конкурсе талантов. Вы даёте ему два значения, а он выносит вердикт: «True» или «False».
True False True False True False True True
Результаты сравнения можно сохранять в переменных. Это удобно, когда нужно проверить условие один раз, а результат использовать несколько раз.
True True
Как сравнивать строки в Python
Сравнивать можно и строки. Python проверяет их символ за символом в алфавитном (точнее, в Unicode) порядке. Заглавные буквы идут раньше строчных.
True False True True True
Как использовать логические операторы and, or и not
Иногда одного сравнения недостаточно. Может понадобиться проверить, что человек достаточно взрослый и у него есть билет. Или что сегодня суббота или воскресенье. Для объединения условий в Python есть три логических оператора.
Оператор and
Оператор and возвращает True, только когда истинны обе стороны. Это как дверь с двумя замками: чтобы её открыть, нужны оба ключа.
True False True
Оператор or
Оператор or возвращает True, когда истинна хотя бы одна сторона. Это как дверь с двумя звонками: нажмите любой, и вам откроют.
True False True
Оператор not
Оператор not меняет логическое значение на противоположное. True становится False, а False становится True. Как будто щёлкаете выключателем.
False True True
Что такое вычисление по короткой схеме в Python?
Python ленив, но с умом. Вычисляя and или or, он останавливается, как только ответ становится известен. Это называется вычислением по короткой схеме (short-circuit evaluation).
В случае and, если первое значение равно False, Python даже не смотрит на второе: результат уже False. В случае or, если первое значение равно True, второе пропускается: результат уже True.
False True False
Что такое истинные и ложные значения (truthy и falsy) в Python?
Вот неожиданный факт: в Python у каждого значения есть «истинность». Важны не только True и False: любое значение можно рассматривать как истинное или ложное.
Представьте кошелёк: он пустой или в нём что-то есть? Пустые вещи считаются «ложными» (falsy). Вещи с содержимым считаются «истинными» (truthy).
False False False False False False True True True True
Как использовать функцию bool()
Функция bool() превращает любое значение в соответствующее логическое значение. Она показывает, считает ли Python значение истинным или ложным.
True False True False False No input provided
На практике вызывать bool() напрямую приходится редко. Python сам проверяет истинность в инструкциях if. Запись if name: означает то же, что if bool(name):, только короче.
name = "Alice"
if bool(name) == True:
print("Name is set")name = "Alice"
if name:
print("Name is set")Как использовать цепочки сравнений в Python
В Python есть изящный приём, которого нет в большинстве языков: сравнения можно связывать в цепочку, как в математике. Вместо x > 1 and x < 10 можно написать 1 < x < 10.
True True True
Цепочки сравнений читаются так же, как математическая запись. Они короче и понятнее с первого взгляда. Используйте их всякий раз, когда проверяете, попадает ли значение в диапазон.
Частые ошибки с логическими значениями в Python
Ошибка 1: = вместо ==
Это самая частая ошибка новичков при работе с логическими значениями. Одиночный знак = служит для присваивания (переменная получает значение). Двойной == служит для сравнения (проверка, равны ли два значения).
score = 100
# This assigns 50 to score, not a comparison!
# if score = 50: # SyntaxError!
# print("You got 50")score = 100
if score == 50:
print("You got 50")
else:
print("Not 50")Ошибка 2: сравнение значений разных типов
Сравнение строки с числом может дать неожиданный результат. Строка "5" не равна числу 5. У них разные типы.
False True True True True
Практические упражнения
Создайте переменную num со значением 42. С помощью цепочки сравнений проверьте, находится ли num между 1 и 100 (включительно). Выведите результат.
Ожидаемый вывод:
TrueСоздайте переменную word со значением "Python". Проверьте, что строка не пустая И длиннее 3 символов. Выведите результат.
Ожидаемый вывод:
TrueНе запуская код, предскажите, что выведет каждая строка. Затем запустите код и проверьте свои ответы.
Код выводит результаты трёх логических операций.
Код ниже должен проверять, равна ли переменная status строке "active", и выводить результат. Но в нём есть ошибка. Найдите и исправьте её.
Ожидаемый вывод:
TrueСоздайте переменную year со значением 2024. Год считается високосным, если:
С помощью оператора остатка от деления % и логических операторов проверьте это. Выведите результат.
Ожидаемый вывод:
TrueС помощью функции bool() выведите истинность следующих значений, каждое на отдельной строке и строго в этом порядке:
1. 0
2. "hello"
3. ""
4. 42
5. None
Ожидаемый вывод:
False
True
False
True
False