🐛 Типичные ошибки и как их исправить

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

  • Забыть int() или float() для input().
  • Путать and и or в сложных условиях.
  • Сравнивать float через == после вычислений.

Ошибка 1. Забыть преобразовать input()

age = input("Введите возраст: ")
if age < 18:          # TypeError: '<' not supported between 'str' and 'int'
    print("Несовершеннолетний")
⚠️ Проблема: input() всегда возвращает строку. Сравнение строки с числом вызывает ошибку.

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

age = int(input("Введите возраст: "))
if age < 18:
    print("Несовершеннолетний")

Ошибка 2. Путаница and и or

# Неправильно: число не может быть и меньше 0, и больше 100 одновременно
if x < 0 and x > 100:
    print("Вне диапазона")
⚠️ Проблема: условие x < 0 and x > 100 никогда не будет истинным.

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

if x < 0 or x > 100:
    print("Вне диапазона")

Ошибка 3. Сравнение float через ==

a = 0.1 + 0.2
if a == 0.3:
    print("Равно")    # не выполнится
⚠️ Проблема: 0.1 + 0.2 хранится как 0.30000000000000004.

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

import math

if math.isclose(a, 0.3):
    print("Равно")

Ошибка 4. Неправильный порядок elif

score = 85

if score > 50:
    grade = "Удовлетворительно"
elif score > 75:
    grade = "Хорошо"        # никогда не выполнится
else:
    grade = "Отлично"
⚠️ Проблема: условия проверяются сверху вниз. Если score > 50 истинно, дальнейшие проверки пропускаются.

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

if score > 90:
    grade = "Отлично"
elif score > 75:
    grade = "Хорошо"
elif score > 50:
    grade = "Удовлетворительно"
else:
    grade = "Неудовлетворительно"

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

from decimal import Decimal

price = Decimal(0.1) * 3
print(price)  # 0.300000000000000016653...
⚠️ Проблема: Decimal(0.1) получает уже неточное двоичное представление float.

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

price = Decimal('0.1') * 3
print(price)  # 0.3

Ошибка 6. from module import *

from math import *
from random import *

print(pi)  # конфликт: pi может быть переопределён
⚠️ Проблема: звёздочка импортирует все имена в текущее пространство имён, что может привести к конфликтам.

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

import math
import random

print(math.pi)
print(random.random())

Ошибка 7. Забыть, что round — банковское округление

print(round(2.5))  # ожидаем 3, получаем 2
print(round(3.5))  # ожидаем 4, получаем 4
⚠️ Проблема: round() округляет до ближайшего чётного при дробной части 0.5.

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

import math

# Математическое округление от нуля
x = 2.5
rounded = math.floor(x + 0.5) if x >= 0 else math.ceil(x - 0.5)
print(rounded)  # 3