Является ли строка палиндромом
Вводится строка. Определить, является ли она палиндромом, и вывести соответствующее сообщение. Палиндромом называется слово или фраза, которые читаются одинаково справа налево и слева направо.
Решение задачи на языке программирования Python
"Классический" алгоритм:
# ввод строки s = input() # длина строки length = len(s) # Находим длину половины строки делением нацело на 2. # Если количество символов нечетно, то стоящий в середине # не учитывается, т.к его сравниваемая пара - он сам. half_length = length // 2 # количество итераций цикла равно длине половины строки for i in range(half_length): # Если символ с индексом i не равен "симметричному" # символу с конца строки (который находится путем # индексации с конца), if s[i] != s[-1-i]: # то выводится сообщение, что строка не палиндром. print("It's not palindrome") # выход из программы quit() # До этого места кода программа дойдет, если не произойдет # выход из программы в цикле выше. # Если выхода не произошло, значит строка - палиндром. print("It's palindrome")
Примеры выполнения:
banana It's not palindrome
anna It's palindrome
Другой способ решения - перевернуть строку и сравнить ее с исходной. Если строки окажутся равными, мы имеем дело с палиндромом.
s = input() s2 = '' for i in s: s2 = i + s2 if s == s2: print('Палиндром') else: print('Не палиндром')
Однако эта программа менее эффективная, так как в цикле перебираются все символы строки. В предыдущей варианте цикл завершается сразу, как становилось ясно, что строка палиндромом не является.
Пользуясь возможностями языка Python, можно найти и другие способы решения задачи. Например, если передать строку в функцию reversed
, из нее будет возвращен объект-итератор, генерирующий символы строки в обратном порядке. Если передать этот объект в строковый метод join
, он проитерирует его и объединит символы в строку.
s = input() s2 = ''.join(reversed(s)) print(s == s2) # True - если палиндром, False - если нет.
Из строки можно взять срез с отрицательным шагом. В этом случае символы будут перевернуты относительно своих исходных позиций.
s2 = s[::-1]