- Логический тип данных (bool) в Python
- Преобразования
- Другие типы → bool
- bool → str
- bool → int
- Логический тип и операторы
- Логические выражения и операторы в Python 3
- Сравнение значений Python и для чего это нужно
- Логические выражения
- Сравнение строк
- Сравнение других типов значений
- Преобразование значений в тип bool
- Логические операторы
- Другие виды логических операторов
- Заключение
Логический тип данных (bool) в Python
Логический тип данных (bool) (или булевый тип) это примитивный тип данных, который принимает 2 значения — истина или ложь.
В Python имеется самостоятельный логический тип bool , с двумя предопределенными значениями:
True и False пишутся с большой буквы. Если написать с маленькой true , интерпретатор выдаст ошибку: NameError: name ‘true’ is not defined
True и False являются экземплярами класса bool который в свою очередь является подклассом int Поэтому True и False в Python ведут себя как числа 1 и 0. Отличие только в том, как они выводятся на экран.
>>> True True >>> type(True) >>> isinstance(True, int) True >>> True == 1 True >>> True + 4 # True это число 1 5 >>> 5 * False # False это число 0 0
Часто логический тип данных используется в ветвлениях if . Если результат выполнения True — выполняется соответствующая ветка.
Цикл while работает аналогичным образом — цикл выполняется до тех пор, пока логическое выражение True .
>>> count = 5 >>> while count: print(«count = <>«.format(count)) count -= 1 count = 5 count = 4 count = 3 count = 2 count = 1
Преобразования
Другие типы → bool
В Python для приведения других типов данных к булевому типу, используется функция bool() Работает эта функция по следующему соглашению:
- непустая строка (в том числе если это один или несколько пробелов);
- ненулевое число (в том числе меньшее единицы, например -5);
- непустой список/кортеж (даже если он содержит один пустой элемент, например пустой кортеж);
- функция.
👉 Функция bool() вернет False:
bool → str
Бывают ситуации, когда нам необходимо получить True и False в строковом представлении. Если выполнить код ниже, он вызовет ошибку:
print(«answer is » + True) TypeError: can only concatenate str (not «bool») to str
Ошибка произошла потому, что Python не выполняет неявное приведение типов (как например JavaScript), так как неявное приведение может маскировать логические ошибки.
Для вывода на экран булевого значения, необходимо привести его к строке:
>>> answer = True >>> print(«my answer is » + str(True)) my answer is True
или используйте форматирование строки:
print(«my answer is <>«.format(True))
bool → int
Встроенная функция int() преобразует логическое значение в 1 или 0.
Аналогичного результата можно добиться умножением логического типа на единицу:
Логический тип и операторы
Операторы — это своего рода функционал, представленный в виде символов (например + ==) или зарезервированных слов (например and not).
В Python используется несколько типов операторов. Мы же рассмотрим только операторы сравнения и логические операторы , т.к. результатом их выполнения являются True или False .
>>> 1 == 5 False >>> 1 != 5 True >>> 1 > 5 False >>> 1 < 5 True >>> 1 >= 5 False >>> 1
>>> (1 + 1 == 2) or (2 * 2 == 5) True >>> (1 + 1 == 2) and (2 * 2 == 5) False >>> (1 + 1 == 2) and not (2 * 2 == 5) True
Логические выражения и операторы в Python 3
Сравнение значений Python и для чего это нужно
Когда мы хотим проверить, зарегистрирован ли пользователь на сайте, мы запрашиваем у него логин и пароль. Если логин существует в базе данных и введённый пароль совпадает с паролем в базе, то мы авторизуем пользователя. Иначе продолжаем запрашивать у пользователя логин и пароль.В примерах ниже мы сравним значения одного типа друг с другом на языке программирования Python.
Вот как реализовано сравнение двух строк в Python :
print(10 == 5) #False
print('abc' == 'abc') #True
Пример с проверкой пароля:
correct_password = 'qwerty'
asked_password = input('Введите пароль: ')
if (correct_password == asked_password):
print('Вы авторизованы')
else:
print('Пароль неверный')
Введите пароль: 123
Пароль неверный
Введите пароль: qwerty
Вы авторизованы
Логическое сравнение или его результат используется в конструкциях if-else и циклах while .
Логические выражения
Логическое выражение в самом простом смысле — это математическое сравнение. В Python вопрос » Что больше: 3 или 5? » будет записан в следующем виде: 3 > 5 и звучать как: “Три больше пяти. Правда? — Нет.”
print(3 > 5) #False
Или такой вариант: 4 != 0 ( 4 не равно 0. Правда?)
print(4 != 0) #True
Как записываются операторы сравнения в Python:
a = 5
b = 10
print(a == b) #False
print(a > b) #False
print(a >= b) #False
print(a < b) #True
print(a print(a != b) #True
Результат такого сравнения можно сохранить в переменную, как и любое другое значение:
a = 5
b = 10
expr = a > b
print(expr) #False
Можно сравнивать сразу несколько значений подряд:
a = 4
expr = 0 a 10
print(expr) #True
a = 15
expr = 0 a 10
print(expr) #False
В итоге в первом значении мы получили True, а во втором Python выдал False.
Сравнение строк
Помимо чисел, в Python можно сравнивать друг с другом строки , списки и другие типы данных.
Вот, например, как выглядит сравнение двух строк в Python:
s1 = 'python'
s2 = 'python'
s3 = 'Python' # Поменяем одну букву на заглавную
print(s1 == s2) #True
print(s1 == s3) #False
Во втором случае результатом оказалась ложь, т.к. сравнение чувствительно к регистру символов.
Также строки можно проверять между собой на большинство/меньшинство.
print('abc' > 'abc') #False
print('abc' > 'aaa') #True
print('abc' > 'x') #False
- В первом случае всё просто — строки равны.
- Во втором: происходит посимвольное сравнение строк. Первые два символа равны, сравниваются следующие.
‘b’ > ‘a’ истинно, т.к. символ ‘b’ стоит в алфавите по порядку после ‘a’ . Поэтому всё выражение истинно. Чтобы проще было понять, можно вместо букв поставить их порядковые номера в алфавите: 123 > 111 - Посимвольное сравнение не зависит от длины строк, поэтому в третьем случае выражение ложно: ‘a’ > ‘x’
print('a' > 'x') #False
Такое сравнение называется лексикографическим: wikipedia.
Сравнение других типов значений
Сравнение списков аналогично сравнению строк. Например, когда условие в Python не равно. Каждый элемент списка по очереди сравнивается с другим.
print([1, 2, 3] > [1, 2, 3]) #False
print([1, 2, 3] > [1, 1, 1]) #True
print([1, 2, 3] > [25]) #False
Значения разных типов можно также сравнивать между собой:
expr1 = '1' == 1
expr2 = '' == 0
print(expr1) #False
print(expr2) #False
Результат ложный, т.к. типы данных не равны. (Строка и число).
Проверка на большинство/меньшинство разных типов выдаст ошибку:
print('a' > 1)
TypeError: '>' not supported between instances of 'str' and 'int'
print((1, 1, 1) [1, 2, 3])
TypeError: '
Преобразование значений в тип bool
Значения False или True можно получить непосредственно из самих значений, без операции сравнения. Например, строка ‘a’ будет True , а 0 — False . Для этого нужно вызвать функцию bool() и передать ей параметр, который мы хотим преобразовать:
var1 = bool('a')
var2 = bool(0)
print(var1) #True
print(var2) #False
А вот пустая строка или список будут равны False :
var1 = bool('')
var2 = bool([])
print(var1) #False
print(var2) #False
Логика простая — если размер списка или строки равен нулю, то переменная bool в Python будет равна False .
Все остальные значения, отличные от 0 или с длиной больше 0 будут True.
Как правило, булевые операции в Python нужны, когда проверяется наличие какой-либо информации в переменной, например, заполнил ли пользователь необходимые поля в форме регистрации или оставил их пустыми.
Упрощённая версия такой проверки:
user_name = input('Введите Ваше имя: ')
if user_name:
print(f'Добро пожаловать, !')
else:
print('Это обязательное поле')
Введите Ваше имя:
Это обязательное поле
Введите Ваше имя: Иван
Добро пожаловать, Иван!
Логические операторы
Если мы хотим проверить на истинность сразу несколько логических выражений или значений, то нам нужно использовать в Python 3 логические операторы .
Например ввел ли пользователь своё имя и больше ли 12 лет его возраст:
name = 'Иван'
age = 10
expr = name and age > 12
print(expr) #False
Мы использовали логический оператор and . Он возвращает истинное значение, только тогда, когда по обе стороны от него находятся истинные значения.
- or — Возвращает истинное значение, когда хотя бы с одной стороны от него находится истинное значение.
- not — Меняет значение на противоположное.
Все они работают с булевыми эквивалентами значений. Т.е. сначала преобразуют их в тип bool , а затем производят вычисления.
print(True and False) # False
print(True or False) # True
print(not True) # False
print(not False) # True
Логические операции можно комбинировать между собой в одном выражении:
expr = not True and False
print(expr) #False
Вычисления происходят по порядку. Чтобы изменить его, надо использовать скобки, как в математике.
expr = not (True and False)
print(expr) #True
Значение поменялось на истинное, т.к. сначала считается выражение внутри скобок ( False ), а затем происходит его инверсия. В Python есть одна особенность при использовании операторов and и or . Они не обязательно возвращают только True b False . Они возвращают непосредственно само значение, на котором остановились вычисления.
name1 = 'Иван'
age = 0
name2 = 'Василий'
print(name1 and age and name2) #0
print(name1 or age or name2) #Иван
- В первом случае вернулся 0 , потому что расчёты остановились на переменной age . Так как все операторы являются and , то если одно из значений ложно, то и всё выражение будет ложно, следовательно, дальше считать нет смысла.
- Во втором случае обратная ситуация. Все операторы являются or , поэтому вычисления останавливаются на первом истинном значении. Собственно, оно нам и вернулось — значение переменной name1.
Другие виды логических операторов
Существуют также другие логические операции, которые используются реже и в специфических ситуациях.
Например, есть логические побитовые операции , которые применяются в шифровании данных.
Одна из таких — XOR : исключающее ИЛИ. В Python этой операции соответствует символ ^ .
Пример шифрования числа. Вместо чисел могут быть любые бинарные данные.
phrase = 2022
key = 101
# Шифрование используя ключ
encrypt = phrase ^ key
print(encrypt)
# Расшифровка сообщения используя ключ
decrypt = encrypt ^ key
print(decrypt)
1923
2022
Список всех побитовых операторов в Python:
Операция | Значение |
a & b | Побитовое И для a и b |
a | b | Побитовое ИЛИ для a и b |
a ^ b | Исключающее ИЛИ для a и b |
~a | Инверсия битов для a |
a | Побитовый сдвиг влево для a на b |
a >> b | Побитовый сдвиг вправо для a на b |
Однако не все логические операции присутствуют в питоне. Например, в питоне нет логической операции импликация .
Заключение
Мы рассмотрели логические выражения и операторы в Python 3. Больше о работе с python читайте в блоге cloud.timeweb.com .
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.