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

❌ Ошибка 1: Забытое двоеточие после заголовка for

# Wrong: SyntaxError
for i in range(5)
    print(i)

Сообщение об ошибке: SyntaxError: expected ':'

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

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

for i in range(5):
    print(i)

Что изменилось: добавлено двоеточие в конце заголовка цикла.

❌ Ошибка 2: Неправильные отступы тела цикла

# Wrong: IndentationError
for i in range(5):
print(i)

Сообщение об ошибке: IndentationError: expected an indented block after 'for' statement

Почему возникает: в Python тело цикла должно быть с отступом относительно заголовка for.

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

for i in range(5):
    print(i)

Что изменилось: строка print(i) выровнена на один уровень отступа.

❌ Ошибка 3: Путаница с границами range

# Wrong: prints 1..4 instead of 1..5
for i in range(1, 5):
    print(i)

Сообщение об ошибке: ошибки нет, но выводится на одно число меньше, чем ожидалось.

Почему возникает: range(1, 5) генерирует числа 1, 2, 3, 4; верхняя граница не включается.

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

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

Что изменилось: верхняя граница увеличена на 1, чтобы включить 5.

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

# Wrong: confusing behavior
for i in range(5):
    print(i)
    i += 10

Сообщение об ошибке: ошибки нет, но вывод остаётся 0 1 2 3 4.

Почему возникает: переменная цикла перезаписывается на каждой итерации следующим элементом из range(). Изменение i внутри тела не влияет на последовательность.

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

for i in range(0, 50, 10):
    print(i)

Что изменилось: нужная последовательность задана сразу в range().

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

# Wrong: exits instead of skipping
for letter in "Python":
    if letter == "h":
        break  # meant to skip
    print(letter, end=" ")
# Output: P y t

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

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

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

for letter in "Python":
    if letter == "h":
        continue  # skip only this iteration
    print(letter, end=" ")
# Output: P y t o n

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

❌ Ошибка 6: range с отрицательным шагом в неправильном направлении

# Wrong: empty sequence
for i in range(0, 10, -1):
    print(i)

Сообщение об ошибке: ошибки нет, но ничего не выводится.

Почему возникает: при отрицательном шаге start должен быть больше stop. Здесь 0 < 10, поэтому последовательность пуста.

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

for i in range(10, 0, -1):
    print(i)

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

❌ Ошибка 7: Неправильное понимание for/else

# Wrong: else runs even after break
for letter in "Python":
    if letter == "h":
        print("Found")
        break
    print(letter)
else:
    print("Not found")  # should not run

Сообщение об ошибке: ошибки нет, но логика может быть неожиданной.

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

✅ Правильное понимание

for letter in "Python":
    if letter == "x":
        print("Found")
        break
else:
    print("Not found")  # runs because no break

Что изменилось: else используется как обработчик случая, когда цикл дошёл до конца без прерывания.