❌ Ошибка 1: Неправильные границы range()
# Wrong: missing +1, the last code is skipped
start = 65
end = 70
for code in range(start, end):
print(chr(code), end="")
# Output: ABCDE (F is missing)
Сообщение об ошибке: ошибки нет, но результат короче, чем ожидалось.
Почему возникает: range(start, stop) не включает stop. Чтобы включить end, нужно range(start, end + 1).
✅ Исправление
for code in range(start, end + 1):
print(chr(code), end="")
# Output: ABCDEF
❌ Ошибка 2: Off-by-one при индексации строки
# Wrong: IndexError
text = "Python"
print(text[len(text)]) # IndexError: string index out of range
Сообщение об ошибке: IndexError: string index out of range
Почему возникает: последний допустимый индекс равен len(text) - 1, а не len(text).
✅ Исправление
text = "Python"
print(text[len(text) - 1]) # n
# or
print(text[-1]) # n
❌ Ошибка 3: Неинициализированный аккумулятор
# Wrong: UnboundLocalError
for char in text:
result += char
print(result)
Сообщение об ошибке: UnboundLocalError: cannot access local variable 'result' where it is not associated with a value
Почему возникает: переменная-аккумулятор должна быть создана до цикла.
✅ Исправление
result = ""
for char in text:
result += char
print(result)
❌ Ошибка 4: Попытка изменить строку по индексу
# Wrong: TypeError
text = "Python"
text[0] = "J" # TypeError: 'str' object does not support item assignment
Сообщение об ошибке: TypeError: 'str' object does not support item assignment
Почему возникает: строки в Python неизменяемы. Для изменения символа нужно собирать новую строку.
✅ Исправление
text = "Python"
new_text = "J" + text[1:]
print(new_text) # Jython
❌ Ошибка 5: Неверное сравнение Unicode-диапазонов
# Wrong: skips uppercase Russian letters
text = "АБВ"
for char in text:
if "а" <= char <= "я":
print(char)
Сообщение об ошибке: ошибки нет, но заглавные русские буквы не обрабатываются.
Почему возникает: диапазон "а".."я" включает только строчные буквы. Заглавные находятся в диапазоне "А".."Я".
✅ Исправление
text = "АБВ"
for char in text:
if ("А" <= char <= "Я") or ("а" <= char <= "я"):
print(char)
❌ Ошибка 6: Пропуск преобразования input() в число
# Wrong: TypeError
height = input("Введите высоту: ")
for i in range(height, 0, -1):
print(i)
# TypeError: 'str' object cannot be interpreted as an integer
Сообщение об ошибке: TypeError: 'str' object cannot be interpreted as an integer
Почему возникает: input() всегда возвращает строку. Её нужно преобразовать в число через int().
✅ Исправление
height = int(input("Введите высоту: "))
for i in range(height, 0, -1):
print(i)
❌ Ошибка 7: Лишний пробел при выводе символов
# Wrong: trailing space
text = "Python"
for char in text:
print(char, end=" ")
# Output: P y t h o n (with trailing space)
Сообщение об ошибке: ошибки нет, но в конце строки появляется лишний пробел.
Почему возникает: после каждого символа, включая последний, добавляется пробел.
✅ Исправление
text = "Python"
for i in range(len(text)):
if i == len(text) - 1:
print(text[i], end="")
else:
print(text[i], end=" ")
# Output: P y t h o n
❌ Ошибка 8: Забытый последний элемент при ручном разбиении строки
# Wrong: last word is lost
text = "abc def"
word = ""
for char in text:
if char != " ":
word += char
else:
print(word)
word = ""
# Output: abc (def is lost)
Сообщение об ошибке: ошибки нет, но последнее слово не выводится, потому что строка не заканчивается пробелом.
Почему возникает: вывод слова происходит только при встрече пробела. После цикла остаётся непечатанный хвост.
✅ Исправление
text = "abc def"
word = ""
for char in text:
if char != " ":
word += char
else:
if word:
print(word)
word = ""
if word:
print(word)
# Output: abc\ndef
❌ Ошибка 9: Проверка цифры через isdigit() вместо диапазона
# Wrong: for this exercise the task expects range check, but works fine
char = "5"
if "0" <= char <= "9":
print("digit")
Примечание: оба способа правильные, но в задачах, где требуется именно сравнение кодов, стоит использовать диапазон. Метод isdigit() более универсален (например, recognizes superscript digits).
✅ Варианты
char = "5"
print("0" <= char <= "9") # True
print(char.isdigit()) # True