❌ Ошибка 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], [], []]