Как проверить, является ли строка палиндромом на Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, является ли строка палиндромом на Python. Палиндром — это последовательность символов, которая читается одинаково как слева направо, так и справа налево, например, "madam" или "racecar".

В рамках практического занятия (лабораторной работы) вы создадите скрипт на Python, в котором будет определена функция is_palindrome для определения палиндромов. Это включает обработку входного текста путем преобразования его в нижний регистр и удаления пробелов, а затем сравнение обработанного текста с его обратной версией. Вы также научитесь тестировать функцию на примерах слов.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") subgraph Lab Skills python/strings -.-> lab-559574{{"Как проверить, является ли строка палиндромом на Python"}} python/conditional_statements -.-> lab-559574{{"Как проверить, является ли строка палиндромом на Python"}} python/function_definition -.-> lab-559574{{"Как проверить, является ли строка палиндромом на Python"}} python/regular_expressions -.-> lab-559574{{"Как проверить, является ли строка палиндромом на Python"}} end

Определение палиндромов

На этом этапе мы рассмотрим концепцию палиндромов и узнаем, как их определять с помощью Python. Палиндром — это слово, фраза, число или другая последовательность символов, которая читается одинаково как слева направо, так и справа налево. Примеры включают "madam", "racecar" и "level".

Для начала создадим скрипт на Python, чтобы определить, что такое палиндром.

  1. Откройте редактор VS Code в среде LabEx.

  2. Создайте новый файл с именем palindrome.py в директории ~/project.

    Вы можете создать новый файл, щелкнув правой кнопкой мыши в панели проводника (обычно слева) и выбрав "New File". Убедитесь, что вы сохранили файл как palindrome.py в директории ~/project.

  3. Добавьте следующий код Python в файл palindrome.py:

    def is_palindrome(text):
        processed_text = ''.join(text.lower().split())
        return processed_text == processed_text[::-1]
    
    ## Example usage
    word = "madam"
    if is_palindrome(word):
        print(f"'{word}' is a palindrome")
    else:
        print(f"'{word}' is not a palindrome")

    Разберем этот код:

    • def is_palindrome(text):: Эта строка определяет функцию с именем is_palindrome, которая принимает строку text в качестве входных данных.
    • processed_text = ''.join(text.lower().split()): Эта строка подготавливает входной текст для проверки на палиндром. Сначала она преобразует текст в нижний регистр с помощью .lower(), а затем удаляет все пробелы, используя .split() для разделения строки на список слов и ''.join() для объединения слов обратно в одну строку без пробелов.
    • return processed_text == processed_text[::-1]: Эта строка сравнивает обработанный текст с его обратной версией. processed_text[::-1] создает обратную копию строки. Если обработанный текст совпадает с его обратной версией, функция возвращает True (это палиндром); в противном случае она возвращает False.
    • Строки после определения функции являются примером использования. Они вызывают функцию is_palindrome с словом "madam" и выводят, является ли оно палиндромом или нет.
  4. Теперь запустим скрипт. Откройте терминал в WebIDE. Обычно вы можете найти вкладку терминала внизу интерфейса VS Code, или вы можете открыть новый терминал через меню: Terminal -> New Terminal.

  5. В терминале перейдите в директорию ~/project (если вы еще не там):

    cd ~/project
  6. Выполните скрипт Python:

    python palindrome.py
  7. Вы должны увидеть следующий вывод:

    'madam' is a palindrome

    Это подтверждает, что наш скрипт правильно определяет "madam" как палиндром.

Переворачивание и сравнение

На этом этапе мы более подробно рассмотрим, как работает функция is_palindrome, явно переворачивая входную строку и затем сравнивая ее с оригиналом. Это даст вам более ясное понимание процесса определения палиндромов.

  1. Откройте файл palindrome.py в редакторе VS Code. Это тот же файл, который вы создали на предыдущем этапе.

  2. Измените функцию is_palindrome в файле palindrome.py так, чтобы она явно переворачивала строку:

    def is_palindrome(text):
        processed_text = ''.join(text.lower().split())
        reversed_text = processed_text[::-1]  ## Explicitly reverse the string
        return processed_text == reversed_text
    
    ## Example usage
    word = "madam"
    if is_palindrome(word):
        print(f"'{word}' is a palindrome")
    else:
        print(f"'{word}' is not a palindrome")
    
    word2 = "hello"
    if is_palindrome(word2):
        print(f"'{word2}' is a palindrome")
    else:
        print(f"'{word2}' is not a palindrome")

    Вот что изменилось:

    • reversed_text = processed_text[::-1]: Эта строка создает обратную копию строки processed_text и присваивает ее переменной reversed_text.
    • return processed_text == reversed_text: Теперь эта строка сравнивает исходный обработанный текст с явно перевернутой строкой.
    • Добавлен второй пример со словом "hello", чтобы продемонстрировать не-палиндром.
  3. Сохраните изменения в файле palindrome.py.

  4. Запустите скрипт снова в терминале:

    python palindrome.py
  5. Теперь вы должны увидеть следующий вывод:

    'madam' is a palindrome
    'hello' is not a palindrome

    Этот вывод подтверждает, что скрипт правильно определяет как палиндромы, так и не-палиндромы. Явно переворачивая строку, мы сделали логику функции is_palindrome более прозрачной.

Игнорирование регистра и пробелов

На этом этапе мы усовершенствуем нашу функцию is_palindrome так, чтобы она могла обрабатывать фразы, являющиеся палиндромами, но содержащие пробелы и буквы разного регистра. Например, "A man, a plan, a canal: Panama" является палиндромом, если игнорировать пробелы, пунктуацию и регистр букв.

  1. Откройте файл palindrome.py в редакторе VS Code.

  2. Измените функцию is_palindrome в файле palindrome.py так, чтобы она игнорировала регистр и пробелы:

    import re
    
    def is_palindrome(text):
        processed_text = re.sub(r'[^a-zA-Z]', '', text).lower()
        reversed_text = processed_text[::-1]
        return processed_text == reversed_text
    
    ## Example usage
    word1 = "A man, a plan, a canal: Panama"
    if is_palindrome(word1):
        print(f"'{word1}' is a palindrome")
    else:
        print(f"'{word1}' is not a palindrome")
    
    word2 = "Racecar"
    if is_palindrome(word2):
        print(f"'{word2}' is a palindrome")
    else:
        print(f"'{word2}' is not a palindrome")
    
    word3 = "hello"
    if is_palindrome(word3):
        print(f"'{word3}' is a palindrome")
    else:
        print(f"'{word3}' is not a palindrome")

    Разберем изменения:

    • import re: Эта строка импортирует модуль re, который предоставляет операции с регулярными выражениями.
    • processed_text = re.sub(r'[^a-zA-Z]', '', text).lower(): Теперь эта строка использует регулярное выражение для удаления из входного текста любых символов, не являющихся буквами (от a до z и от A до Z). re.sub(r'[^a-zA-Z]', '', text) заменяет все не-буквенные символы пустой строкой, фактически удаляя их. Затем .lower() преобразует полученную строку в нижний регистр.
    • Мы добавили примеры использования с фразами "A man, a plan, a canal: Panama", "Racecar" и "hello" для тестирования обновленной функции.
  3. Сохраните изменения в файле palindrome.py.

  4. Запустите скрипт снова в терминале:

    python palindrome.py
  5. Теперь вы должны увидеть следующий вывод:

    'A man, a plan, a canal: Panama' is a palindrome
    'Racecar' is a palindrome
    'hello' is not a palindrome

    Этот вывод подтверждает, что скрипт теперь правильно определяет палиндромы даже при наличии пробелов, пунктуации и букв разного регистра. Регулярное выражение эффективно очищает входной текст, позволяя точно определять палиндромы.

Резюме

В этом практическом занятии (лабораторной работе) мы начали с изучения концепции палиндромов, которые представляют собой строки, читающиеся одинаково как вперед, так и назад. Затем мы создали скрипт на Python с именем palindrome.py, содержащий функцию is_palindrome(text) для определения палиндромов.

Функция is_palindrome сначала предварительно обрабатывает входной текст, преобразуя его в нижний регистр и удаляя пробелы. Затем она сравнивает обработанный текст с его обратной версией, чтобы определить, является ли он палиндромом. Функция возвращает True, если это так, и False в противном случае. В скрипте также есть примеры использования, демонстрирующие, как вызывать функцию и выводить результат.