1. Забыть преобразовать строку в число
input() возвращает строку. Если не преобразовать её в int или float, сравнение будет работать как сравнение строк, что даст неожиданный результат.
# Ошибка
age = input("Введите возраст: ")
if age < 18: # TypeError: '<' not supported between instances of 'str' and 'int'
print("Ребёнок")
# Правильно
age = int(input("Введите возраст: "))
if age < 18:
print("Ребёнок")
2. Вывести строку вместо значения переменной
В PDF решении задачи 2 встречается ошибка: в кавычках написано имя переменной, поэтому программа выводит текст, а не число.
# Ошибка
num1 = 8
print("Большее число:", "num1") # Большее число: num1
# Правильно
print("Большее число:", num1) # Большее число: 8
print(f"Большее число: {num1}") # Большее число: 8
3. Перепутать and и or
Условие «температура ниже -10 и ветер выше 20» требует, чтобы оба условия были истинны одновременно. Если написать or, предупреждение сработает при любом сильном ветре, даже в тёплую погоду.
# Ошибка: сработает при любом ветре > 20
if temperature < -10 or wind_speed > 20:
print("Экстремальная погода!")
# Правильно
if temperature < -10 and wind_speed > 20:
print("Экстремальная погода!")
4. Не обработать граничные значения
Границы диапазонов часто вызывают вопросы: входит ли значение в диапазон или нет? В задаче 4 возраст 18 должен попадать в категорию «взрослый», а не «подросток».
# Ошибка: 18 попадёт в "подросток"
if age >= 12 and age <= 18:
print("Вы подросток.")
# Правильно
if 12 <= age < 18:
print("Вы подросток.")
elif 18 <= age < 60:
print("Вы взрослый.")
5. Избыточная вложенность
Новички часто вкладывают if друг в друга, хотя можно обойтись одним условием с and.
# Вложенность без необходимости
if a + b > c:
if a + c > b:
if b + c > a:
print("Треугольник существует")
# Плоский вариант
if a + b > c and a + c > b and b + c > a:
print("Треугольник существует")
6. Не учитывать ноль в знаке произведения
Если одно из чисел равно нулю, произведение равно нулю и не имеет знака. Исходная задача не требует обработки этого случая, но в реальном коде стоит предусмотреть отдельную ветку.
a = int(input("Введите первое число: "))
b = int(input("Введите второе число: "))
c = int(input("Введите третье число: "))
if a == 0 or b == 0 or c == 0:
print("Произведение равно нулю.")
elif ((a < 0) + (b < 0) + (c < 0)) % 2 == 0:
print("Произведение положительное.")
else:
print("Произведение отрицательное.")
7. Проблемы с отступами
Python использует отступы для выделения блоков. Пропуск отступа или смешивание табов и пробелов приводит к IndentationError.
# Ошибка: print не сдвинут
if x > 0:
print("Положительное")
# Правильно
if x > 0:
print("Положительное")