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

⚡ Топ ошибок

  • Путать конец range(): range(5) даёт 0..4, а не 0..5.
  • Off-by-one: индекс len(my_list) вместо len(my_list) - 1.
  • Изменение списка во время итерации по нему.
  • Перепутать break и continue или не понимать else у цикла.
  • Изменять переменную цикла вместо элемента списка.

❌ Ошибка 1: неправильный конец диапазона

# Wrong: диапазон не включает stop
for i in range(1, 10):
    print(i)
# Выведет 1..9, а ожидалось 1..10

Почему возникает: range(start, stop) не включает stop.

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

for i in range(1, 11):
    print(i)

❌ Ошибка 2: выход за границы списка

# Wrong: IndexError
my_list = [10, 20, 30]
print(my_list[len(my_list)])

Сообщение об ошибке: IndexError: list index out of range

Почему возникает: последний допустимый индекс равен len(my_list) - 1.

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

my_list = [10, 20, 30]
print(my_list[-1])  # 30

❌ Ошибка 3: изменение списка во время итерации

# Wrong: непредсказуемое поведение
numbers = [1, 2, 3, 4]
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)
print(numbers)

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

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

numbers = [1, 2, 3, 4]
numbers = [num for num in numbers if num % 2 != 0]
print(numbers)

❌ Ошибка 4: путаница break / continue / else

# Wrong: ожидается "не найдено", но else не выполнится
for letter in "Python":
    if letter == "h":
        print("Найдено")
        break
else:
    print("Не найдено")

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

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

found = False
for letter in "Python":
    if letter == "h":
        found = True
        break
if found:
    print("Найдено")
else:
    print("Не найдено")

❌ Ошибка 5: изменение переменной цикла вместо списка

# Wrong: список не изменится
numbers = [1, 2, 3]
for num in numbers:
    num = num * 2
print(numbers)  # [1, 2, 3]

Почему возникает: переменная цикла получает копию ссылки на элемент; её переопределение не меняет список.

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

numbers = [1, 2, 3]
for i in range(len(numbers)):
    numbers[i] = numbers[i] * 2
print(numbers)  # [2, 4, 6]

❌ Ошибка 6: повторение списка с изменяемыми элементами

# Wrong: общие ссылки
buckets = [[]] * 3
buckets[0].append(1)
print(buckets)  # [[1], [1], [1]]

Почему возникает: * копирует ссылки на один и тот же внутренний список.

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

buckets = [[] for _ in range(3)]
buckets[0].append(1)
print(buckets)  # [[1], [], []]