РАЗБИРАЕМ ПО ШАГАМ
От идеи к работающему коду
Строка — упорядоченная последовательность символов. Научимся выделять фрагменты, очищать ввод и собирать текст. Затем проверим палиндром: фразу, которая одинаково читается в обе стороны после согласованной очистки.
Сразу к запуску примера ↓
- 1Исходный текст
- 2Нормализация и срезы
- 3Проверка или сборка
1. Символы, длина и срезы
Индексы строки работают как у списка. Срез text[start:stop:step] возвращает фрагмент; правая граница не включается. Запись [::-1] создаёт строку в обратном порядке.
Строки неизменяемы: присвоить text[0] новое значение нельзя. Методы и срезы возвращают новые строки. До обращения text[0] проверь, что текст не пуст.
text = "Python"print(len(text))print(text[:2])print(text[::-1])if text: print(text[0])2. Очищаем и нормализуем ввод
strip убирает пробельные символы по краям, но не внутри строки. lower переводит буквы в нижний регистр, upper — в верхний. casefold предназначен для сравнения без учёта регистра и учитывает дополнительные особенности Unicode.
Русские буквы поддерживаются обычными строками Python. islower и isupper проверяют регистр букв; строка из одних цифр не считается ни строчной, ни прописной. len считает кодовые точки Unicode, что не всегда совпадает с числом видимых значков, например у составных эмодзи.
text = " Привет, Барсик! "clean = text.strip().casefold()print(clean)print("Привет".upper())print("123".islower())3. Разделяем и собираем
split() без аргумента делит строку по пробельным разделителям и не создаёт пустые слова из повторных пробелов. join соединяет строки выбранным разделителем. replace возвращает текст с заменами.
Для инициалов сначала получи слова, проверь их количество и только затем бери первые буквы. Разность длин двух строк может быть отрицательной; abs возвращает её величину без знака.
name = "Анна Смирнова"parts = name.split()if len(parts) == 2: initials = parts[0][0] + ". " + parts[1][0] + "." print(initials)print(" / ".join(parts))print(abs(len("кот") - len("Барсик")))4. Правило палиндрома
Сначала определяем правила сравнения: игнорируем регистр и все символы, кроме букв и цифр. isalnum проверяет это условие. По очереди добавляем подходящие символы в новую строку.
После очистки сравниваем строку с её обратной версией. Для пустого результата отдельно выводим «Нет символов для проверки»: не выдаём успех для строки из одних знаков препинания.
text = "А роза упала на лапу Азора!"clean = ""for char in text.casefold(): if char.isalnum(): clean += charif not clean: print("Нет символов для проверки")else: print(clean == clean[::-1])Где легко ошибиться
- Ожидать, что strip удалит пробелы внутри фразы.
- Забыть сохранить результат replace или lower.
- Обращаться к первому символу пустой строки.
Проверь понимание: Почему text.lower() без присваивания не меняет text?
Метод возвращает новую строку. Нужна запись text = text.lower(), потому что строки неизменяемы.
