Сравнение чисел в Python: все способы и типичные ошибки

Раздел: Основы Python -> Условные операторы

Сравнение чисел в Python: основы и практические варианты

Как эффективно сравнить два числа в Python?

Основной способ сравнения чисел использует операторы >, <, >=, <=, ==, != в сочетании с условным оператором if. Это самый прямой и читаемый подход.

a = 10
b = 20

if a > b:
    print("a больше b")
elif a < b:
    print("a меньше b")
else:
    print("a равно b")

значение else python (значение else в python)

a меньше b

какие логические операторы используются в python (какие логические операторы используются в python)

Цель: принять решение на основе числового сравнения. Случаи использования: любые программы, где нужно ветвление по числовым данным: проверка возраста, баланса, результатов измерений.

Типичная ошибка - путать = (присваивание) и == (сравнение). Исправить легко: всегда использовать два знака равенства для сравнения.

Как сравнить числа, введённые пользователем?

Ввод от пользователя через input() возвращает строку. Для сравнения её нужно преобразовать в число (int или float).

x = input("Введите первое число: ")
y = input("Введите второе число: ")

try:
    x = int(x)
    y = int(y)
    if x > y:
        print(f"{x} больше {y}")
    else:
        print(f"{x} не больше {y}")
except ValueError:
    print("Ошибка: введите целое число")

Python как сделать выбор (реализация выбора (if-else) в python)

Проблема: если пользователь введёт не число, возникнет исключение ValueError. Решение - обернуть преобразование в try/except или использовать isdigit() для предварительной проверки.

Случай использования: интерактивные программы, калькуляторы, игры с угадыванием чисел.

Как проверить, что число лежит в заданном диапазоне?

Python поддерживает цепочки сравнений, что делает код компактным.

age = 25
if 18 <= age < 65:
    print("Взрослый трудоспособного возраста")
else:
    print("Возраст вне диапазона")

сложные условия в python (сложные условные конструкции в python)

Взрослый трудоспособного возраста

Python число больше и меньше (сравнение чисел (больше/меньше) в python)

Цель: одновременная проверка верхней и нижней границы. Применение: валидация данных, фильтрация.

Ошибка: неверный порядок операндов, например age > 18 and age < 65 - логически то же, но менее читаемо.

Как сравнивать числа с плавающей точкой (float) без ошибок округления?

Из-за особенностей представления вещественных чисел прямое сравнение == может дать неожиданный результат. Лучше использовать math.isclose().

import math
a = 0.1 + 0.2  # 0.30000000000000004
b = 0.3

if a == b:
    print("Равны")
else:
    print("Не равны")

if math.isclose(a, b, rel_tol=1e-9):
    print("Достаточно близки")

Python if несколько условий (проверка нескольких условий с помощью if в python)

Не равны
Достаточно близки

конструкция if elif else в python (конструкция if-elif-else в python)

Цель: надёжное сравнение вещественных чисел. Применение: научные расчёты, финансовые вычисления.

Не использовать == для float без tolerance. Альтернатива - округление через round(), но оно может маскировать ошибки.

Как сравнить числа с помощью тернарного оператора?

Условное выражение в одну строку полезно для простых присваиваний.

a, b = 12, 7
max_value = a if a > b else b
print(f"Максимум: {max_value}")

программирование разветвляющихся алгоритмов python (разветвляющиеся алгоритмы в python)

Максимум: 12

Цель: сократить код для простого ветвления. Когда использовать: присваивание значения по условию; не подходит для сложной логики.

Злоупотребление тернарным оператором снижает читаемость. Лучше оставить многострочный if для более двух веток.

Как найти наибольшее или наименьшее число в списке?

Встроенные функции max() и min() делают это за одну операцию.

numbers = [3, 7, 1, 9, 4]
print(f"Максимум: {max(numbers)}, минимум: {min(numbers)}")
Максимум: 9, минимум: 1

Также можно отсортировать и взять первый/последний элемент.

sorted_nums = sorted(numbers)
print(f"Наименьшее: {sorted_nums[0]}, наибольшее: {sorted_nums[-1]}")

Цель: быстрое нахождение экстремумов. Применение: анализ данных, расчёты.

Как проверить, все ли числа в коллекции удовлетворяют условию?

Функции all() и any() с генератором или списковым включением.

numbers = [2, 4, 6, 8]
if all(n > 0 for n in numbers):
    print("Все числа положительные")
if any(n == 0 for n in numbers):
    print("Есть ноль")
else:
    print("Нуля нет")
Все числа положительные
Нуля нет

Цель: коллективная проверка предиката. Применение: валидация списков, условия набора данных.

Как сравнивать числа с бесконечностью?

Python поддерживает специальные значения float('inf') и -float('inf').

large = 10**6
if large < float('inf'):
    print("Любое конечное число меньше бесконечности")
if -float('inf') < large:
    print("Отрицательная бесконечность меньше любого числа")
Любое конечное число меньше бесконечности
Отрицательная бесконечность меньше любого числа

Цель: работа с математическими пределами. Применение: алгоритмы поиска кратчайшего пути, оптимизация.

Не путать float('inf') с None или строкой. Сравнение с float('nan') ведёт себя неопределённо.

Расширенные примеры сравнения чисел в Python

Сравнение с учётом погрешности для float

Использование decimal.Decimal для точных финансовых расчётов.

Пример
from decimal import Decimal, getcontext
getcontext().prec = 6

a = Decimal('0.1') + Decimal('0.2')
b = Decimal('0.3')
print(a == b)  # True, так как Decimal избегает проблем двоичного представления
True

Сравнение чисел в разных системах счисления

Python позволяет задавать числа в двоичной, восьмеричной, шестнадцатеричной системах. Сравниваются они как обычные целые.

Пример
a = 0b1010  # 10 в десятичной
b = 0o12    # 10 в десятичной
c = 0xA     # 10 в десятичной
print(a, b, c)
print(a == b == c)  # True, потому что все равны 10
10 10 10
True

Сравнение с использованием оператора is (не рекомендуется для чисел)

Оператор is проверяет идентичность объектов, а не равенство значений. Для малых целых чисел Python кэширует объекты, но для больших это не гарантируется.

Пример
a = 256
b = 256
print(a is b)  # True, так как 256 кэшируется

c = 257
d = 257
print(c is d)  # False (зависит от реализации), правильнее c == d
True
False

Ошибка: использование is для сравнения чисел может привести к неожиданным результатам. Всегда используйте ==.

Сравнение больших чисел (long integer)

Python автоматически поддерживает целые числа произвольной длины. Сравнение работает корректно.

Пример
a = 10**100
b = 10**100 - 1
print(a > b)  # True
print(a == b)  # False
True
False

Сравнение с помощью cmp() (Python 2) и её замена в Python 3

В Python 2 была встроенная функция cmp(a, b), возвращающая -1, 0, 1. В Python 3 её нет, но можно использовать (a > b) - (a < b).

Пример
def cmp(a, b):
    return (a > b) - (a < b)

print(cmp(3, 5))  # -1
print(cmp(5, 3))  # 1
print(cmp(4, 4))  # 0
-1
1
0

Множественное сравнение всех элементов списка с порогом

Пример
threshold = 10
numbers = [5, 12, 8, 20]

# Все ли числа больше порога?
all_greater = all(x > threshold for x in numbers)
print(f"Все числа больше {threshold}: {all_greater}")

# Хотя бы одно число больше порога?
any_greater = any(x > threshold for x in numbers)
print(f"Хотя бы одно > {threshold}: {any_greater}")
Все числа больше 10: False
Хотя бы одно > 10: True

Сравнение с помощью filter()

Пример
numbers = [1, 4, 6, 3, 9, 2]
# Оставить только числа больше 3
filtered = list(filter(lambda x: x > 3, numbers))
print(filtered)  # [4, 6, 9]
[4, 6, 9]

Сравнение чисел с разными типами (int и float)

Python автоматически приводит int к float при сравнении.

Пример
print(5 > 4.9)  # True
print(5 < 4.9)  # False
print(5 == 5.0) # True
True
False
True

Проблема: при сравнении complex с числами других типов возникает исключение TypeError, так как комплексные числа не упорядочены.

Пример
# print(3 > 2+1j)  # TypeError: '>' not supported between instances of 'int' and 'complex'

Сравнение с помощью numpy (для массивов)

Пример
import numpy as np
arr = np.array([1.5, 2.7, 0.8, -1.2])
mask = arr > 1.0
print(mask)  # [ True  True False False]
print(arr[mask])  # [1.5 2.7]
[ True  True False False]
[1.5 2.7]

Сравнение чисел (больше/меньше) в Python - comments

En
Python число больше и меньше (python)