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

❌ Ошибка 1: Забытое изменение переменной цикла

# Wrong: infinite loop
i = 1
while i <= 5:
    print(i)
    # forgot i += 1

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

Почему возникает: условие i <= 5 всегда истинно, потому что i не меняется.

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

i = 1
while i <= 5:
    print(i)
    i += 1

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

❌ Ошибка 2: Изменение переменной в противоположную сторону

# Wrong: infinite loop
i = 0
while i < 10:
    print(i)
    i -= 1  # moves away from the exit condition

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

Почему возникает: i уменьшается, а условие выхода требует, чтобы i стало больше или равно 10.

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

i = 0
while i < 10:
    print(i)
    i += 1

Что изменилось: переменная увеличивается, приближаясь к условию выхода.

❌ Ошибка 3: Изменение переменной после continue

# Wrong: infinite loop when i is even
count = 0
while count <= 5:
    print("Число:", count)
    if count == 3:
        continue
    count += 1

Сообщение об ошибке: цикл зацикливается при достижении count == 3.

Почему возникает: при срабатывании continue инкремент count += 1 не выполняется.

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

count = 0
while count <= 5:
    print("Число:", count)
    if count == 3:
        count += 1
        continue
    count += 1

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

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

# Wrong: exits instead of skipping
i = 0
while i < 5:
    i += 1
    if i == 3:
        break  # meant to skip 3
    print(i)
# Output: 1 2

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

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

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

i = 0
while i < 5:
    i += 1
    if i == 3:
        continue  # skip only this iteration
    print(i)
# Output: 1 2 4 5

Что изменилось: break заменён на continue.

❌ Ошибка 5: Выход за границы строки

# Wrong: IndexError
text = "hello"
print(text[10])   # IndexError: string index out of range
print(text[-6])   # IndexError

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

Почему возникает: индекс больше len(text) - 1 или меньше -len(text).

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

text = "hello"
index = 5
if 0 <= index < len(text):
    print(text[index])
else:
    print("Index out of range!")

Что изменилось: перед обращением проверяем, что индекс находится в допустимом диапазоне.

❌ Ошибка 6: Попытка изменить строку по индексу

# Wrong: TypeError
text = "hello"
text[0] = "H"  # TypeError: 'str' object does not support item assignment

Сообщение об ошибке: TypeError: 'str' object does not support item assignment

Почему возникает: строки в Python неизменяемы.

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

text = "hello"
text = "H" + text[1:]
print(text)  # Hello

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

❌ Ошибка 7: Неправильный порядок индексов в срезе

# Wrong: empty result
text = "Python programming"
print(text[-4:-11])   # empty string
print(text[14:7])     # empty string

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

Почему возникает: при положительном шаге start должен быть меньше end.

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

text = "Python programming"
print(text[-11:-4])   # program
print(text[7:14])     # program

Что изменилось: индексы расположены в правильном порядке.

❌ Ошибка 8: Неверное сравнение строк без учёта регистра

# Wrong: unexpected False
print("Apple" == "apple")  # False

Сообщение об ошибке: ошибки нет, но сравнение даёт неожиданный результат.

Почему возникает: заглавные и строчные буквы имеют разные коды Unicode.

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

print("Apple".lower() == "apple".lower())  # True

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