Когда мы хотим проверить, зарегистрирован ли пользователь на сайте, мы запрашиваем у него логин и пароль. Если логин существует в базе данных и введённый пароль совпадает с паролем в базе, то мы авторизуем пользователя. Иначе продолжаем запрашивать у пользователя логин и пароль. В примерах ниже мы сравним значения одного типа друг с другом на языке программирования 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 <= b) #True
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
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: '<' not supported between instances of 'tuple' and 'list'
Значения 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 - это так же False.
Все остальные значения, отличные от 0 или с длиной больше 0 будут True.
Как правило, булевые операции в Python нужны, когда проверяется наличие какой-либо информации в переменной, например, заполнил ли пользователь необходимые поля в форме регистрации или оставил их пустыми.
Упрощённая версия такой проверки:
user_name = input('Введите Ваше имя: ')
if user_name:
print(f'Добро пожаловать, {user_name}!')
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) #Иван
Существуют также другие логические операции, которые используются реже и в специфических ситуациях.
Например, есть логические побитовые операции, которые применяются в шифровании данных.
Одна из таких - 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 << b | Побитовый сдвиг влево для a на b |
a >> b | Побитовый сдвиг вправо для a на b |
Однако не все логические операции присутствуют в питоне. Например, в питоне нет логической операции импликация.
Подготовили выгодные тарифы на облачные серверы
Мы рассмотрели логические выражения и операторы в Python 3. Больше о работе с python читайте в блоге timeweb.cloud.
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.