Сравнение значений в Python: операторы и их применение
Операторы сравнения в Python: соответствие математическим знакам
Операторы сравнения (==, !=, <, >, <=, >=) используются для проверки отношений между значениями. Результатом всегда является логический тип bool - True или False. Эти операторы полностью соответствуют математическим знакам равенства, неравенства, строгого и нестрогого сравнения.
Основной способ: прямое применение операторов
Самый простой и эффективный вариант - использовать оператор прямо в условии или присвоить результат переменной.
a = 10
b = 5
print(a == b) # False
print(a != b) # True
print(a < b) # False
print(a > b) # True
print(a <= b) # False
print(a >= b) # Trueоператоры сравнения в python к математическим знакам (операторы сравнения в python)
False True False True False True
Python присвоить (присвоение в python)
Вариант 1: Проверка равенства чисел с плавающей точкой
Как корректно сравнить два числа float на равенство?
Из-за ошибок округления прямое сравнение == может дать неожиданный результат. Рекомендуется проверять, находится ли разница в пределах допустимой погрешности (epsilon).
x = 0.1 + 0.2
y = 0.3
epsilon = 1e-9
print(x == y) # False
print(abs(x - y) < epsilon) # TruePython hello py (программа hello world на python)
False True
какие имена являются правильными в python (правильные имена переменных в python)
Типичная ошибка:
Сравнение float через == без учёта погрешности. Решение: использовать math.isclose() или задать epsilon.
Вариант 2: Сравнение строк без учёта регистра
Как проверить равенство строк, игнорируя заглавные буквы?
Python различает регистр. Чтобы сравнить строки без учёта регистра, следует привести обе к одному регистру (обычно к нижнему).
s1 = 'Hello'
s2 = 'hello'
print(s1 == s2) # False
print(s1.lower() == s2.lower()) # TrueFalse True
Проблема:
Забыть про регистр - частая причина багов при обработке пользовательского ввода.
Вариант 3: Проверка вхождения в диапазон (цепочки сравнений)
Как проверить, что число находится между двумя значениями?
Python позволяет записывать цепочки сравнений, например a < b < c, что эквивалентно a < b and b < c. Это удобно и читаемо.
x = 15
print(10 < x < 20) # True
print(10 < x <= 15) # True (включает 15)True True
Ошибка:
Начинающие пишут 10 < x and < 20 - синтаксическая ошибка. Нужно использовать цепочки или полное выражение с and.
Вариант 4: Сравнение разных типов
Можно ли сравнивать число и строку?
В Python 3 сравнение объектов разных типов (например, int и str) вызывает TypeError, за исключением числовых типов (int, float, complex) между собой.
print(5 > '3') # TypeError: '>' not supported between instances of 'int' and 'str'TypeError: '>' not supported between instances of 'int' and 'str'
Решение:
Перед сравнением привести операнды к одному типу.
Вариант 5: Сравнение с None
Как проверить, равна ли переменная None?
Для проверки на None рекомендуется использовать is и is not, а не ==, так как == может быть перегружен и дать неверный результат для кастомных классов.
value = None
print(value == None) # True, но не рекомендуется
print(value is None) # True (правильный способ)True True
Распространённая ошибка:
Использовать == None вместо is None. В большинстве случаев работает, но считается плохой практикой.
Расширенные примеры использования операторов сравнения
1. Сравнение списков и кортежей
Сравнение последовательностей происходит лексикографически: сначала сравниваются первые элементы, если они равны - вторые и так далее.
print([1, 2, 3] == [1, 2, 3]) # True
print([1, 2, 3] < [1, 2, 4]) # True (3 < 4)
print([1, 2] < [1, 2, 3]) # True (меньшая длина считается меньшей)
print([1, 3] > [1, 2, 5]) # True (3 > 2)True True True True
2. Сравнение строк (лексикографическое)
Строки сравниваются по кодам Unicode символов.
print('apple' < 'banana') # True (a < b)
print('Python' > 'python') # False, т.к. 'P' (80) < 'p' (112)
print('abc' == 'abc') # TrueTrue False True
3. Цепочки сравнений
Можно комбинировать несколько сравнений в одном выражении.
x = 25
print(10 < x < 30) # True
print(10 < x < 20) # False
print(10 < x < 30 != 40) # True (истинны все части)True False True
4. Сравнение с помощью in и not in
Хотя это не операторы сравнения, они часто используются в условиях для проверки принадлежности.
nums = [1, 2, 3]
print(2 in nums) # True
print(5 not in nums) # TrueTrue True
5. Сравнение пользовательских объектов
Можно переопределить методы __eq__, __lt__ и другие для кастомных классов.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
return self.x == other.x and self.y == other.y
def __lt__(self, other):
return (self.x, self.y) < (other.x, other.y)
p1 = Point(1, 2)
p2 = Point(1, 2)
p3 = Point(2, 1)
print(p1 == p2) # True
print(p1 < p3) # TrueTrue True
6. Опасность сравнения с is для изменяемых объектов
is проверяет идентичность, а не равенство. Для одинаковых по содержанию списков is даст False.
a = [1, 2]
b = [1, 2]
print(a == b) # True
print(a is b) # FalseTrue False
7. Сравнение чисел разных типов
int и float сравниваются корректно, complex поддерживает только == и !=.
print(5 == 5.0) # True
print(5 < 5.1) # True
print(3+4j == 3+4j) # True
# print(3+4j < 2+5j) # TypeErrorTrue True True
8. Использование not для инвертирования
Унарный оператор not превращает True в False и наоборот.
flag = False
print(not flag) # True
print(not (10 > 5)) # False
print(not (10 < 5)) # TrueTrue False True
9. Сравнение с None и is not
Правильный способ проверить, что переменная не равна None.
val = 0
if val is not None:
print('val не None') # выводится
else:
print('val is None')val не None