Один из типов данных, доступных в Python, — это логический. Знание логических значений помогает создавать логические условия в ваших приложениях Python.
Булев тип — один из типов данных, предоставляемых языком программирования Python. Булев тип может иметь два значения: True или False. Булевы типы позволяют создавать логические условия, определяющие поведение приложения. Булевы операторы используются для создания более сложных логических условий.
Давайте посмотрим, как использовать логические значения в ваших программах на Python!
Что такое логическое значение в Python?
Булев тип данных Python, который может иметь значение True
или False
.
Для начала давайте разберемся, как ведут себя логические значения, используя оболочку Python:
>>> True
True
>>> False
False
Как вы можете видеть, выражение, которое содержит только логическое значение True
, является True
. Точно так же выражение, которое содержит только логическое значение False
, является False
.
Давайте выясним тип, возвращаемый интерпретатором Python для True
и False
, с помощью функции type()
:
>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>
Оба значения True
и False
имеют тип bool
.
Является ли число 1 истинным в Python?
Это интересный вопрос…
Как числа связаны с логическим типом данных?
Давайте посмотрим, сможем ли мы получить ответ из оболочки Python, если применим функцию bool()
к числам 0 и 1.
>>> bool(1)
True
>>> bool(0)
False
Вы можете видеть, что число один преобразуется в логическое значение True
, а число ноль — в логическое значение False
.
Вот еще один пример с числами с плавающей точкой и комплексными числами:
>>> bool(10)
True
>>> bool(5.45)
True
>>> bool(3+4j)
True
>>> bool(0.0)
False
Это показывает, что все числа преобразуются в True
, если только они не равны нулю.
Как написать логическое значение на Python?
Мы увидели, что значениями логического значения являются True
и False
.
Убедитесь, что первая буква True
или False
заглавная, иначе интерпретатор Python не воспримет их как логические значения.
Посмотрите, что произойдет, если мы используем True
и False
, используя строчную первую букву:
>>> true
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> false
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'false' is not defined
Мы получаем ошибку «name is not defined».
Как использовать булевы переменные
Мы также можем присваивать переменной логические значения.
Например…
>>> var = True
>>> type(var)
<class 'bool'>
>>> var = False
>>> type(var)
<class 'bool'>
Теперь мы напишем код, использующий логические переменные.
Представьте, что вы создаете простую программу, которая автоматизирует бронирование ваших встреч. Программа проверяет значение булевой переменной calendar_free, чтобы понять, свободен ли определенный временной интервал в вашем календаре.
Затем мы используем оператор if else
для бронирования встречи, если значение calendar_free равно True. В противном случае система не сможет забронировать встречу.
calendar_free = True
if calendar_free is True:
print("Your calendar is free. Booking your meeting.")
else:
print("Your calendar is not free. Unable to book meeting.")
Обратите внимание, что мы используем оператор is
для оценки того, является ли переменная calendar_free значением True
.
Запустив программу, вы увидите следующее сообщение:
Your calendar is free. Booking your meeting.
Вот что происходит, когда интерпретатор Python доходит до условия if
:
>>> calendar_free = True
>>> calendar_free is True
True
Выражение «calendar_free is True
» возвращает True
. Вот почему выполняется оператор print в ветви if оператора if else
.
Как оценить логическое выражение в Python
В предыдущем разделе мы рассмотрели пример логического выражения Python.
Давайте посмотрим еще один, немного отличающийся от первого:
x = 0
while x < 5:
print("The value of x is {}".format(x))
x += 1
Мы установили значение переменной x
, а затем используем цикл while
для вывода значения x
, пока x
меньше 5.
Также важно видеть, что на каждой итерации цикла while
мы увеличиваем x
на 1 (без этого мы застряли бы в бесконечном цикле).
Вот как оценивается условие x < 5
для различных значений x
:
>>> x = 0
>>> x < 5
True
>>> x = 1
>>> x < 5
True
>>> x = 5
>>> x < 5
False
Выполнение цикла while
останавливается, когда значение выражения x < 5
становится ложным.
Результат работы программы:
The value of x is 0
The value of x is 1
The value of x is 2
The value of x is 3
The value of x is 4
Еще один пример логического выражения
Представьте, что вы пишете программу на Python и хотите определить логическую переменную, значение которой определяет, находится ли программа в режиме отладки или нет.
Также, исходя из этого, вы захотите распечатать дополнительные сообщения, которые помогут вам устранить потенциальные неполадки в программе.
Продолжим работу над программой, написанной в предыдущем разделе:
x = 0
debug=True
while x < 5:
print("The value of x is {}".format(x))
if debug is True:
print("There are {} iterations left".format(5-x))
x += 1
На этот раз мы установили значение логической переменной debug равным True вне цикла while
.
Затем мы используем оператор if
для вывода отладочного сообщения, если переменная отладки имеет значение True
(снова используя оператор is
).
The value of x is 0
There are 5 iterations left
The value of x is 1
There are 4 iterations left
The value of x is 2
There are 3 iterations left
The value of x is 3
There are 2 iterations left
The value of x is 4
There are 1 iterations left
Я не нахожу вывод нашей программы очень понятным…
Что мы можем сделать, чтобы сообщения было легче читать?
x = 0
debug=True
while x < 5:
print("INFO: The value of x is {}".format(x))
if debug is True:
print("DEBUG: There are {} iterations left".format(5-x))
x += 1
Я применил очень простое изменение, добавив INFO
и DEBUG
перед двумя типами сообщений. Это сразу проясняет для пользователя, является ли сообщение информационным или отладочным.
INFO: The value of x is 0
DEBUG: There are 5 iterations left
INFO: The value of x is 1
DEBUG: There are 4 iterations left
INFO: The value of x is 2
DEBUG: There are 3 iterations left
INFO: The value of x is 3
DEBUG: There are 2 iterations left
INFO: The value of x is 4
DEBUG: There are 1 iterations left
Намного лучше!
Можно ли использовать == для булевых значений?
В предыдущих примерах мы использовали оператор is
как часть логических выражений.
Можем ли мы также использовать оператор ==
в логических выражениях?
>>> var = True
>>> var is True
True
>>> var == True
True
>>> var is False
False
>>> var == False
False
После присвоения переменной значения True мы получаем точно такой же результат как с оператором is
, так и с оператором ==
.
Таким образом, мы можем использовать оператор ==
и с логическим значением.
Также вот способ упростить выражение «var is True»:
>>> var is True
True
>>> var
True
Вы можете видеть, что мы получаем True
в качестве результата, даже если мы опускаем часть выражения «is True
».
Итак, программу бронирования календаря, которую мы видели ранее, можно упростить:
calendar_free = True
if calendar_free:
print("Your calendar is free. Booking your meeting.")
else:
print("Your calendar is not free. Unable to book meeting.")
Запустите программу на своем компьютере и убедитесь, что она работает так, как и ожидалось.
Каковы 3 булевых оператора?
Существует три булевых оператора, которые могут быть очень полезны при использовании булевых выражений в приложениях Python.
Оператор not
Оператор not
инвертирует значение переданного ему логического значения.
>>> not True
False
>>> not False
True
Мы можем использовать оператор not
, чтобы переписать логику программы бронирования календаря:
calendar_free = True
if not calendar_free:
print("Your calendar is not free. Unable to book meeting.")
else:
print("Your calendar is free. Booking your meeting.")
Вывод будет таким же, как и раньше (обратите внимание, что мы поменяли местами два оператора печати, учитывая, что логика оператора if-else изменилась после добавления оператора not
):
Оператор and
Оператор and применяется к двум выражениям и следует следующей логике:
Выражение 1 | Выражение 2 | Результат |
---|---|---|
Истинный | Истинный | Истинный |
Истинный | ЛОЖЬ | ЛОЖЬ |
ЛОЖЬ | Истинный | ЛОЖЬ |
ЛОЖЬ | ЛОЖЬ | ЛОЖЬ |
Результат оператора and
имеет значение True
только в том случае, если оба выражения, к которым применяется оператор, имеют значение True
.
Мы можем применить оператор и к приложению бронирования календаря.
После добавления нового логического условия встречи можно будет планировать только в том случае, если ваш календарь свободен и день встречи приходится на будний день (не на выходные):
calendar_free = True
weekday = False
if calendar_free and weekday:
print("Your calendar is free. Booking your meeting.")
else:
print("Your calendar is not free. Unable to book meeting.")
На этот раз программа не сможет запланировать встречу, поскольку weekday имеет значение False
, и, следовательно, результат выражения and
имеет значение False
.
$ python book_meeting.py
Your calendar is not free. Unable to book meeting.
Оператор or
Оператор or
применяется к двум выражениям и следует следующей логике:
Выражение 1 | Выражение 2 | Результат |
---|---|---|
Истинный | Истинный | Истинный |
Истинный | ЛОЖЬ | Истинный |
ЛОЖЬ | Истинный | Истинный |
ЛОЖЬ | ЛОЖЬ | ЛОЖЬ |
Результат оператора or
равен True
, если хотя бы одно из выражений, к которым применяется оператор, равно True
.
Заключение
В этом уроке мы рассмотрели, что такое логическое значение, как оно соотносится с другими типами данных Python и как работать с логическими выражениями.
Надеюсь, рассмотренные нами примеры помогли вам понять, как использовать логические значения в ваших программах на Python.
Если у вас есть вопросы, пишите в комментариях 🙂