Перейти к содержимому
Editor

Тип bool, сравнения и логические операторы в Python

Начальный25 min6 упр.90 XP

Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе

0/6 упр.

Каждый день вы принимаете решения по принципу «да или нет». «Идёт ли дождь?» «Хватит ли мне денег?» «Правильный ли у меня пароль?» Компьютеры принимают такие же решения и используют для этого логические значения.

Логическое значение бывает либо True, либо False. И всё, только два варианта. Это как выключатель света: включено или выключено, да или нет, истина или ложь.

В этом уроке вы узнаете, как Python сравнивает значения, объединяет условия и решает, что считать «истиной», а что «ложью». Эти навыки лежат в основе каждой инструкции if и каждого цикла, которые вы когда-либо напишете.

Что такое логические значения в Python?

В Python есть встроенный тип данных bool. У него ровно два возможных значения: True и False. Обратите внимание на заглавные T и F, это важно.

Создание логических переменных
is_raining = True
has_umbrella = False
print(is_raining) # True
print(has_umbrella) # False
print(type(is_raining)) # <class 'bool'>
Вывод
True
False
<class 'bool'>

Имена логических переменных обычно начинаются с is_, has_ или can_, чтобы код читался как обычная английская фраза. Например, is_logged_in («вошёл ли пользователь») или has_permission («есть ли разрешение») точно говорят, что означает переменная.


Как сравнивать значения в Python

Большинство логических значений появляется не оттого, что кто-то напечатал True или False. Они получаются в результате сравнений. Когда вы сравниваете два значения, Python возвращает логическое значение.

Представьте оператор сравнения в роли судьи на конкурсе талантов. Вы даёте ему два значения, а он выносит вердикт: «True» или «False».

Все шесть операторов сравнения
# Equal to
print(5 == 5) # True
print(5 == 3) # False
# Not equal to
print(5 != 3) # True
print(5 != 5) # False
# Greater than / Less than
print(10 > 5) # True
print(3 < 1) # False
# Greater or equal / Less or equal
print(5 >= 5) # True
print(3 <= 7) # True
Вывод
True
False
True
False
True
False
True
True

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

Сохранение результатов сравнения
age = 20
min_age = 18
is_adult = age >= min_age
print(is_adult) # True
temperature = 35
is_hot = temperature > 30
print(is_hot) # True
Вывод
True
True

Как сравнивать строки в Python

Сравнивать можно и строки. Python проверяет их символ за символом в алфавитном (точнее, в Unicode) порядке. Заглавные буквы идут раньше строчных.

Сравнение строк
# Equality checks
print("hello" == "hello") # True
print("hello" == "Hello") # False (case matters!)
# Alphabetical ordering
print("apple" < "banana") # True (a comes before b)
print("cat" > "car") # True (t comes after r)
# Case-insensitive comparison
name = "Alice"
print(name.lower() == "alice") # True
Вывод
True
False
True
True
True

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

Иногда одного сравнения недостаточно. Может понадобиться проверить, что человек достаточно взрослый и у него есть билет. Или что сегодня суббота или воскресенье. Для объединения условий в Python есть три логических оператора.

Оператор and

Оператор and возвращает True, только когда истинны обе стороны. Это как дверь с двумя замками: чтобы её открыть, нужны оба ключа.

Как работает and
age = 20
has_ticket = True
# Both must be True
print(age >= 18 and has_ticket) # True
print(age >= 18 and not has_ticket) # False (one is False)
# Real-world example: login check
username_ok = True
password_ok = True
print(username_ok and password_ok) # True - access granted!
Вывод
True
False
True

Оператор or

Оператор or возвращает True, когда истинна хотя бы одна сторона. Это как дверь с двумя звонками: нажмите любой, и вам откроют.

Как работает or
is_weekend = True
is_holiday = False
# At least one must be True
print(is_weekend or is_holiday) # True
print(False or False) # False (neither is True)
# Real-world example: discount eligibility
is_student = False
is_senior = True
gets_discount = is_student or is_senior
print(gets_discount) # True
Вывод
True
False
True

Оператор not

Оператор not меняет логическое значение на противоположное. True становится False, а False становится True. Как будто щёлкаете выключателем.

Как работает not
is_raining = True
print(not is_raining) # False
print(not False) # True
# Useful for "if not" conditions
is_logged_in = False
print(not is_logged_in) # True - means "user is NOT logged in"
Вывод
False
True
True

Что такое вычисление по короткой схеме в Python?

Python ленив, но с умом. Вычисляя and или or, он останавливается, как только ответ становится известен. Это называется вычислением по короткой схеме (short-circuit evaluation).

В случае and, если первое значение равно False, Python даже не смотрит на второе: результат уже False. В случае or, если первое значение равно True, второе пропускается: результат уже True.

Вычисление по короткой схеме в действии
# "and" short-circuits on False
print(False and print("This won't run")) # False
# "or" short-circuits on True
print(True or print("This won't run")) # True
# Practical use: safe division
x = 0
# Without short-circuit, this would crash!
result = x != 0 and 10 / x > 2
print(result) # False (never tries 10 / 0)
Вывод
False
True
False

Что такое истинные и ложные значения (truthy и falsy) в Python?

Вот неожиданный факт: в Python у каждого значения есть «истинность». Важны не только True и False: любое значение можно рассматривать как истинное или ложное.

Представьте кошелёк: он пустой или в нём что-то есть? Пустые вещи считаются «ложными» (falsy). Вещи с содержимым считаются «истинными» (truthy).

Ложные и истинные значения
# Falsy values - these all count as False
print(bool(0)) # False (zero)
print(bool(0.0)) # False (zero float)
print(bool("")) # False (empty string)
print(bool([])) # False (empty list)
print(bool({})) # False (empty dict)
print(bool(None)) # False (None)
# Truthy values - these all count as True
print(bool(1)) # True (any non-zero number)
print(bool(-5)) # True (negative numbers too!)
print(bool("hello")) # True (non-empty string)
print(bool([1, 2])) # True (non-empty list)
Вывод
False
False
False
False
False
False
True
True
True
True

Как использовать функцию bool()

Функция bool() превращает любое значение в соответствующее логическое значение. Она показывает, считает ли Python значение истинным или ложным.

Проверка значений с помощью bool()
# Converting various values to booleans
print(bool(42)) # True
print(bool(0)) # False
print(bool("Python")) # True
print(bool("")) # False
print(bool(None)) # False
# Useful for checking if something "exists"
user_input = ""
if bool(user_input):
print("Got input!")
else:
print("No input provided") # This runs
Вывод
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")
В духе Python (чисто)
name = "Alice"
if name:
    print("Name is set")

Как использовать цепочки сравнений в Python

В Python есть изящный приём, которого нет в большинстве языков: сравнения можно связывать в цепочку, как в математике. Вместо x > 1 and x < 10 можно написать 1 < x < 10.

Цепочки сравнений
age = 25
# Chained comparison (Pythonic)
print(18 <= age <= 65) # True - working age
# Same thing without chaining (longer)
print(age >= 18 and age <= 65) # True
# You can chain more than two
x = 5
print(1 < x < 10 < 100) # True - all comparisons pass
Вывод
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. У них разные типы.

Сравнение значений разных типов
# String vs number - not equal!
print("5" == 5) # False
print("5" != 5) # True
# Convert first, then compare
user_input = "5"
print(int(user_input) == 5) # True
# Be careful with True/False and numbers
print(True == 1) # True (!) - True is actually 1
print(False == 0) # True (!) - False is actually 0
Вывод
False
True
True
True
True

Практические упражнения

Проверьте, попадает ли число в диапазон
Напишите код

Создайте переменную num со значением 42. С помощью цепочки сравнений проверьте, находится ли num между 1 и 100 (включительно). Выведите результат.

Ожидаемый вывод:

True
# Create num and check if it's between 1 and 100 (inclusive)
Проверьте длину строки
Напишите код

Создайте переменную word со значением "Python". Проверьте, что строка не пустая И длиннее 3 символов. Выведите результат.

Ожидаемый вывод:

True
# Create word and check if it's non-empty AND longer than 3 characters
Предскажите результат логических операций
Угадайте вывод

Не запуская код, предскажите, что выведет каждая строка. Затем запустите код и проверьте свои ответы.

Код выводит результаты трёх логических операций.

print(True and False)
print(True or False)
print(not True)
Исправьте ошибку в сравнении
Исправьте ошибку

Код ниже должен проверять, равна ли переменная status строке "active", и выводить результат. Но в нём есть ошибка. Найдите и исправьте её.

Ожидаемый вывод:

True
status = "active"
result = status = "active"
print(result)
Проверьте, високосный ли год
Напишите код

Создайте переменную year со значением 2024. Год считается високосным, если:

  • он делится на 4,
  • но не делится на 100,
  • если только он не делится ещё и на 400.
  • С помощью оператора остатка от деления % и логических операторов проверьте это. Выведите результат.

    Ожидаемый вывод:

    True
    # Check if 2024 is a leap year
    Оцените истинность с помощью bool()
    Напишите код

    С помощью функции bool() выведите истинность следующих значений, каждое на отдельной строке и строго в этом порядке:

    1. 0

    2. "hello"

    3. ""

    4. 42

    5. None

    Ожидаемый вывод:

    False
    True
    False
    True
    False
    # Print the truthiness of each value using bool()

    Похожие уроки

    Урок был полезен?