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

❌ Ошибка 1: Забытое преобразование input()

# Wrong
number = input("Введите число: ")
while number > 0:
    print(number)
    number -= 1

Сообщение об ошибке: TypeError: '>' not supported between instances of 'str' and 'int'

Почему возникает: функция input() всегда возвращает строку, а сравнивать строку с числом нельзя.

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

# Correct
number = int(input("Введите число: "))
while number > 0:
    print(number)
    number -= 1

Что изменилось: результат input() преобразован в int.

❌ Ошибка 2: Бесконечный цикл из-за пропущенного инкремента

# Wrong
i = 1
while i <= 10:
    print(i)
    # forgot i += 1

Сообщение об ошибке: программа «зависает» — цикл выполняется бесконечно.

Почему возникает: переменная цикла не меняется, условие всегда истинно.

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

# Correct
i = 1
while i <= 10:
    print(i)
    i += 1

Что изменилось: добавлено обновление переменной цикла.

❌ Ошибка 3: continue до изменения переменной цикла

# Wrong
i = 1
while i <= 5:
    if i % 2 == 0:
        continue
    print(i)
    i += 1

Сообщение об ошибке: программа зацикливается на чётном значении i.

Почему возникает: при чётном i оператор continue пропускает инкремент, и значение i не меняется.

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

# Correct
i = 1
while i <= 5:
    if i % 2 == 0:
        i += 1
        continue
    print(i)
    i += 1

Что изменилось: инкремент добавлен перед continue.

❌ Ошибка 4: Путаница между break и continue

# Wrong
while True:
    value = int(input("Введите число: "))
    if value < 0:
        break  # meant to skip negative values
    total += value

Сообщение об ошибке: программа завершается при первом отрицательном числе.

Почему возникает: break прерывает цикл полностью, а не пропускает итерацию.

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

# Correct
while True:
    value = int(input("Введите число: "))
    if value < 0:
        continue
    total += value

Что изменилось: break заменён на continue, чтобы пропускать отрицательные значения.

❌ Ошибка 5: Неправильное округление float

# Wrong
import math

price = 98.0
payment = (price // 100) * 100 + 100

Сообщение об ошибке: логика работает только для целых сумм; для 98.99 результат будет неверным.

Почему возникает: при сумме, кратной 100, программа всё равно добавляет лишнюю купюру.

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

# Correct
import math

rounded_total = round(total)
payment = math.ceil(rounded_total / 100) * 100

Что изменилось: используется math.ceil, который корректно округляет вверх до ближайшей сотни.

❌ Ошибка 6: Неверное направление сравнения цифр

# Wrong
number = int(input("Введите число: "))
previous_digit = number % 10
number //= 10
is_sorted = True

while number > 0:
    current_digit = number % 10
    if current_digit < previous_digit:
        is_sorted = False
        break
    previous_digit = current_digit
    number //= 10

Сообщение об ошибке: ошибки нет, но результат противоположен ожидаемому.

Почему возникает: цифры извлекаются справа налево, поэтому для возрастания текущая цифра должна быть не больше предыдущей, а не меньше.

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

# Correct
while number > 0:
    current_digit = number % 10
    if current_digit > previous_digit:
        is_sorted = False
        break
    previous_digit = current_digit
    number //= 10

Что изменилось: знак сравнения исправлен на > в полном контексте цикла.