Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, является ли строка палиндромом на Python. Палиндром — это последовательность символов, которая читается одинаково как слева направо, так и справа налево, например, "madam" или "racecar".
В рамках практического занятия (лабораторной работы) вы создадите скрипт на Python, в котором будет определена функция is_palindrome для определения палиндромов. Это включает обработку входного текста путем преобразования его в нижний регистр и удаления пробелов, а затем сравнение обработанного текста с его обратной версией. Вы также научитесь тестировать функцию на примерах слов.
Определение палиндромов
На этом этапе мы рассмотрим концепцию палиндромов и узнаем, как их определять с помощью Python. Палиндром — это слово, фраза, число или другая последовательность символов, которая читается одинаково как слева направо, так и справа налево. Примеры включают "madam", "racecar" и "level".
Для начала создадим скрипт на Python, чтобы определить, что такое палиндром.
Откройте редактор VS Code в среде LabEx.
Создайте новый файл с именем
palindrome.pyв директории~/project.Вы можете создать новый файл, щелкнув правой кнопкой мыши в панели проводника (обычно слева) и выбрав "New File". Убедитесь, что вы сохранили файл как
palindrome.pyв директории~/project.Добавьте следующий код 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" и выводят, является ли оно палиндромом или нет.
Теперь запустим скрипт. Откройте терминал в WebIDE. Обычно вы можете найти вкладку терминала внизу интерфейса VS Code, или вы можете открыть новый терминал через меню: Terminal -> New Terminal.
В терминале перейдите в директорию
~/project(если вы еще не там):cd ~/projectВыполните скрипт Python:
python palindrome.pyВы должны увидеть следующий вывод:
'madam' is a palindromeЭто подтверждает, что наш скрипт правильно определяет "madam" как палиндром.
Разворот и сравнение
На этом этапе мы более подробно рассмотрим, как работает функция is_palindrome, явно переворачивая входную строку и затем сравнивая ее с оригиналом. Это даст вам более ясное понимание процесса определения палиндромов.
Откройте файл
palindrome.pyв редакторе VS Code. Это тот же файл, который вы создали на предыдущем этапе.Измените функцию
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", чтобы продемонстрировать не-палиндром.
Сохраните изменения в файле
palindrome.py.Запустите скрипт снова в терминале:
python palindrome.pyТеперь вы должны увидеть следующий вывод:
'madam' is a palindrome 'hello' is not a palindromeЭтот вывод подтверждает, что скрипт правильно определяет как палиндромы, так и не-палиндромы. Явно переворачивая строку, мы сделали логику функции
is_palindromeболее прозрачной.
Игнорирование регистра и пробелов
На этом этапе мы усовершенствуем нашу функцию is_palindrome так, чтобы она могла обрабатывать фразы, являющиеся палиндромами, но содержащие пробелы и буквы разного регистра. Например, "A man, a plan, a canal: Panama" является палиндромом, если игнорировать пробелы, пунктуацию и регистр букв.
Откройте файл
palindrome.pyв редакторе VS Code.Измените функцию
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" для тестирования обновленной функции.
Сохраните изменения в файле
palindrome.py.Запустите скрипт снова в терминале:
python palindrome.pyТеперь вы должны увидеть следующий вывод:
'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 в противном случае. В скрипте также есть примеры использования, демонстрирующие, как вызывать функцию и выводить результат.



