Ошибка 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