Булевский тип Python: тип данных для ваших логических условий

Один из типов данных, доступных в 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.

Если у вас есть вопросы, пишите в комментариях 🙂

Автор

Фото аватара

Владимир Михайлов

Программист на Python с большим количеством опыта и разнообразных проектов.