❌ Ошибка 1: Попытка изменить строку по индексу
# Wrong
s = "Hello"
s[0] = "h"
print(s)
Сообщение об ошибке: TypeError: 'str' object does not support item assignment
Почему возникает: строки неизменяемы. Нельзя заменить отдельный символ напрямую.
✅ Исправление
s = "Hello"
s = "h" + s[1:]
print(s) # hello
Что изменилось: создана новая строка через срез и конкатенацию.
❌ Ошибка 2: Выход за границы строки
# Wrong
text = "Python"
print(text[10])
Сообщение об ошибке: IndexError: string index out of range
Почему возникает: индекс 10 больше, чем длина строки 6.
✅ Исправление
text = "Python"
index = 10
if index < len(text):
print(text[index])
else:
print("Индекс вне диапазона")
Что изменилось: перед обращением к индексу проверяется длина строки.
❌ Ошибка 3: Ожидание, что метод изменит исходную строку
# Wrong
text = " hello "
text.strip()
print(text) # " hello " — пробелы на месте
Почему возникает: метод strip() возвращает новую строку, а не изменяет исходную.
✅ Исправление
text = " hello "
text = text.strip()
print(text) # "hello"
Что изменилось: результат метода присвоен переменной.
❌ Ошибка 4: Регистрозависимое сравнение без приведения регистра
# Wrong
print("Python" == "python") # False
Почему возникает: символы в разных регистрах имеют разные коды Unicode.
✅ Исправление
print("Python".lower() == "python".lower()) # True
Что изменилось: обе строки приведены к одному регистру перед сравнением.
❌ Ошибка 5: Путаница в границах среза
# Wrong expectation: "Hel"
text = "Hello"
print(text[0:3]) # "Hel" — correct
print(text[0:4]) # "Hell" — the end index is not included
Почему возникает: конечный индекс в срезе не включается.
✅ Исправление
text = "Hello"
print(text[0:3]) # characters at indices 0, 1, 2
Что изменилось: помните, что срез [start:end] включает start и исключает end.
❌ Ошибка 6: Проверка вхождения подстроки с учётом регистра
# Wrong
print("python" in "Python programming") # False
Почему возникает: оператор in ищет точное совпадение, регистр важен.
✅ Исправление
print("python" in "Python programming".lower()) # True
Что изменилось: строка приведена к нижнему регистру перед проверкой.