🐛 Типичные ошибки: Практикум 2

⚡ Кратко

Главные ловушки: забыть преобразовать input() в число; перепутать and с or; вывести строку вместо значения переменной; не обработать граничные случаи; использовать вложенные if там, где хватит одного условия.

  • input() всегда возвращает строку.
  • "num1" и num1 — разные вещи.
  • Проверяйте границы диапазонов.

1. Забыть преобразовать строку в число

input() возвращает строку. Если не преобразовать её в int или float, сравнение будет работать как сравнение строк, что даст неожиданный результат.

📄 mistakes/no_cast.py
# Ошибка
age = input("Введите возраст: ")
if age < 18:  # TypeError: '<' not supported between instances of 'str' and 'int'
    print("Ребёнок")
📄 mistakes/fixed_cast.py
# Правильно
age = int(input("Введите возраст: "))
if age < 18:
    print("Ребёнок")

2. Вывести строку вместо значения переменной

В PDF решении задачи 2 встречается ошибка: в кавычках написано имя переменной, поэтому программа выводит текст, а не число.

📄 mistakes/string_instead_of_var.py
# Ошибка
num1 = 8
print("Большее число:", "num1")  # Большее число: num1

# Правильно
print("Большее число:", num1)    # Большее число: 8
print(f"Большее число: {num1}")  # Большее число: 8

3. Перепутать and и or

Условие «температура ниже -10 и ветер выше 20» требует, чтобы оба условия были истинны одновременно. Если написать or, предупреждение сработает при любом сильном ветре, даже в тёплую погоду.

📄 mistakes/and_or_confusion.py
# Ошибка: сработает при любом ветре > 20
if temperature < -10 or wind_speed > 20:
    print("Экстремальная погода!")

# Правильно
if temperature < -10 and wind_speed > 20:
    print("Экстремальная погода!")

4. Не обработать граничные значения

Границы диапазонов часто вызывают вопросы: входит ли значение в диапазон или нет? В задаче 4 возраст 18 должен попадать в категорию «взрослый», а не «подросток».

📄 mistakes/boundaries.py
# Ошибка: 18 попадёт в "подросток"
if age >= 12 and age <= 18:
    print("Вы подросток.")

# Правильно
if 12 <= age < 18:
    print("Вы подросток.")
elif 18 <= age < 60:
    print("Вы взрослый.")

5. Избыточная вложенность

Новички часто вкладывают if друг в друга, хотя можно обойтись одним условием с and.

📄 mistakes/nested.py
# Вложенность без необходимости
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. Не учитывать ноль в знаке произведения

Если одно из чисел равно нулю, произведение равно нулю и не имеет знака. Исходная задача не требует обработки этого случая, но в реальном коде стоит предусмотреть отдельную ветку.

📄 mistakes/zero_product.py
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.

📄 mistakes/indentation.py
# Ошибка: print не сдвинут
if x > 0:
print("Положительное")

# Правильно
if x > 0:
    print("Положительное")