❌ Ошибка 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
Что изменилось: знак сравнения исправлен на > в полном контексте цикла.