🐛 Типичные ошибки

⚡ Топ-3 ошибки

  • Сравнивать float через == после арифметических операций.
  • Использовать from math import * и путать имена функций.
  • Забывать, что round() округляет до чётного, и передавать float в Decimal.

Ошибка 1. Сравнение float на точное равенство

a = 0.1 + 0.2
print(a == 0.3)   # False

Почему: двоичное представление десятичных дробей неточно.

✅ Исправление

import math
a = 0.1 + 0.2
print(math.isclose(a, 0.3, rel_tol=1e-9))

Ошибка 2. from math import *

from math import *

def sqrt(x):
    return x ** 0.5

print(sqrt(16))   # неожиданный результат или ошибка

Почему: импорт «звёздочкой» может переопределить ваши собственные функции и переменные.

✅ Исправление

import math

def my_sqrt(x):
    return x ** 0.5

print(math.sqrt(16))
print(my_sqrt(16))

Ошибка 3. Передача float в Decimal

from decimal import Decimal
print(Decimal(0.1) + Decimal(0.2))
# 0.3000000000000000166533453694...

Почему: 0.1 как float уже содержит погрешность.

✅ Исправление

from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2'))  # 0.3

Ошибка 4. Неправильное ожидание от round()

print(round(2.5))   # 2, а не 3

Почему: Python использует банковское округление (round-half-to-even).

✅ Исправление

Если нужно школьное округление «от нуля», используйте собственную функцию на основе знака числа или Decimal с явным режимом округления.

Ошибка 5. Тригонометрия в градусах

import math
print(math.sin(90))   # не 1.0!

Почему: math.sin принимает радианы, а не градусы.

✅ Исправление

import math
print(math.sin(math.radians(90)))  # 1.0