Сравнение чисел на неравенство в Python
Операция сравнения «не равно» для чисел в Python
Основным и наиболее эффективным способом проверки неравенства двух чисел в Python является оператор !=. Этот оператор возвращает True, если значения левой и правой части различны, и False, если они равны. Он работает для всех числовых типов: целых (int), чисел с плавающей точкой (float), комплексных (complex).
a = 5
b = 7
result = a != b # TruePython число не равно (операция сравнения «не равно» для чисел в python)
True
Оператор != часто применяется в условных конструкциях:
number = 10
if number != 0:
print("Число не равно нулю")
Число не равно нулю
Типичная ошибка: путаница между оператором присваивания = и оператором сравнения !=. Если написать if a = 5:, возникнет синтаксическая ошибка. Для сравнения всегда применяют два символа.
Как проверить неравенство через отрицание равенства?
Вместо != можно использовать отрицание оператора ==: not (a == b). Этот подход эквивалентен, но менее нагляден и требует дополнительных скобок.
a = 3.14
b = 2.71
if not (a == b):
print("Числа различны")
Числа различны
Проблема: для сложных условий скобки легко пропустить, что приводит к ошибке. Например, if not a == b равносильно if (not a) == b, если a - логическое значение. Рекомендуется всегда использовать != для простоты чтения.
Как учесть погрешность при сравнении чисел с плавающей точкой?
Из-за особенностей представления вещественных чисел прямое сравнение 0.1 + 0.2 != 0.3 может дать неожиданный результат. Для проверки неравенства с учётом машинного эпсилон применяют not math.isclose(a, b) или abs(a - b) > epsilon.
import math
x = 0.1 + 0.2
y = 0.3
if not math.isclose(x, y):
print("Числа не равны в пределах точности")
else:
print("Числа равны с учётом погрешности")
Числа равны с учётом погрешности
Альтернативный способ - задать допустимую разницу вручную:
epsilon = 1e-9
if abs(x - y) > epsilon:
print("Не равны")
Ошибка: использование != для float без учёта погрешности может привести к ложным срабатываниям. Рекомендуется применять math.isclose при работе с дробными числами.
Как в Python 2 выполнялась проверка неравенства?
В Python 2 существовал альтернативный оператор <>, который также означал «не равно». В Python 3 он удалён, поэтому код с <> вызовет синтаксическую ошибку.
# Только для Python 2:
# if a <> b:
# print("Не равно")
Современная разработка ведётся на Python 3, поэтому следует использовать только !=.
Можно ли использовать is not для сравнения чисел?
Оператор is not проверяет, являются ли два объекта разными экземплярами в памяти, а не равенство значений. Для малых целых чисел (обычно от -5 до 256) Python кэширует объекты, поэтому a is not b может случайно работать. Но для больших чисел или чисел с плавающей точкой результат непредсказуем.
a = 1000
b = 1000
print(a is not b) # True (разные объекты)
print(a != b) # False (значения равны)
True False
Ошибка: использование is not для проверки неравенства значений - распространённая логическая ошибка. Если требуется сравнить числовые значения, применяйте !=.
Как сравнивать число с результатом вычисления?
Оператор != можно применять в цепочках с другими операциями, например, для проверки, что переменная не равна результату функции.
import random
number = random.randint(1, 10)
if number != 5:
print(f"Случайное число {number} не равно 5")
Случайное число 8 не равно 5
Также допустимы составные условия: if a != b and b != c:
Частая проблема: сравнение чисел разных типов, например, 5 != "5". В Python 3 такое сравнение всегда даёт True, так как типы различны. Если ожидается, что строка может быть преобразована в число, необходимо явно привести тип.
print(5 != "5") # True (разные типы)
print(5 != int("5")) # False после преобразования
True False
Расширенные примеры сравнения чисел на неравенство
Пример 1. Использование != в списковом включении для фильтрации чисел, не равных заданному.
numbers = [1, 2, 3, 4, 5, 3, 6]
filtered = [x for x in numbers if x != 3]
print(filtered)
[1, 2, 4, 5, 6]
Пример 2. Проверка, что все элементы коллекции отличны от нуля с помощью all.
values = (0.5, -1, 3.14, 0)
all_nonzero = all(v != 0 for v in values)
print(all_nonzero) # False, так как последний элемент равен 0
False
Пример 3. Сравнение комплексных чисел.
a = 2 + 3j
b = 2 + 3j
c = 4 - 1j
print(a != b) # False (равны)
print(a != c) # True
False True
Пример 4. Применение функции filter для отбора чисел, не равных определённому значению.
nums = [10, 20, 30, 40]
result = list(filter(lambda x: x != 20, nums))
print(result)
[10, 30, 40]
Пример 5. Обработка ошибки деления на ноль с проверкой делителя.
divisor = 0
try:
if divisor != 0:
print(10 / divisor)
else:
print("Деление на ноль невозможно")
except ZeroDivisionError:
print("Исключение не возникло, так как проверка выполнена")
Деление на ноль невозможно
Пример 6. Демонстрация разницы между is not и != для больших целых чисел.
a = 9999
b = 9999
print(a is b) # False (разные объекты)
print(a is not b) # True
print(a != b) # False (значения равны)
# Для кэшированных чисел:
c = 100
d = 100
print(c is d) # True (интернирование)
False True False True
Пример 7. Проверка неравенства с учётом погрешности через math.isclose (обратный результат).
import math
a = 0.1 * 3
b = 0.3
if not math.isclose(a, b, rel_tol=1e-9, abs_tol=0.0):
print("Числа не равны")
else:
print("Числа равны в пределах допуска")
Числа равны в пределах допуска
Пример 8. Сравнение с результатом математической операции.
import math
x = math.sqrt(2)
y = 2.0
if x != y:
print(f"Корень из 2 ({x:.5f}) не равен 2")
Корень из 2 (1.41421) не равен 2
Пример 9. Использование != в условном выражении (тернарный оператор).
a = 7
result = "не ноль" if a != 0 else "ноль"
print(result)
не ноль
Пример 10. Сравнение чисел, полученных из разных источников (ввод пользователя).
user_input = input("Введите число: ")
try:
value = float(user_input)
if value != 42.0:
print("Число не равно 42")
else:
print("Угадано!")
except ValueError:
print("Ошибка: введено не число")
(при вводе '100') Число не равно 42