Вернёмся к палиндромам — числам, словам и предложениям, которые читаются одинаково в оба направления.
Напишите программу, которая определяет, относится ли введённая строка к палиндромам.
Формат ввода
Вводится строка.
Формат вывода:
Требуется вывести YES
— если введенная строка является палиндромом, иначе – NO
.
Пример
Ввод
мама
Вывод
NO
Ввод
анна
Вывод
YES
Решение
Задача решается ровно так же, как и Q. А роза упала на лапу Азора 3.0 с той лишь разницей, что там мы разворачивали число, а тут надо развернуть строку. С помощью срезов это можно сделать в одну операцию и на даже не потребуется дополнительная переменная.
В силу того, что Python язык интерпретируемый попытка решить эту задачу через цикл и сравнение первого и последнего, второго и предпоследнего и так далее символов окажется существенно медленней чем работа со срезами. Хотя для большинства компилируемых языков, все будет ровно наоборот.
Строго говоря, нам нет необходимости сравнивать всю строку со своей развернутой копией. достаточно сравнить первую половину строки с развернутой второй половиной, но чаще всего этим нюансом пренебрегают ради простоты и читабельности кода.
Этот прием можно использовать не только для строк, а для любого итерируемого объекта.
Ниже представлены оба варианта решения задачи.
Обратите внимание на использование знака ~ в индексации строки при проверке в первом варианте решения. Он означает элемент противоположный данному и позволяет избежать записи string[-1 – pos]. Согласитесь, что string[~pos] выглядит немного элегантнее.
Посмотреть код
Решение
# Классическое сравнение
string = input()
palindrome = True
for pos in range(len(string) // 2):
if string[pos] != string[~pos]:
palindrome = False
break
if palindrome:
print('YES')
else:
print('NO')
Решение
# Срезы
string = input()
if string == string[::-1]:
print('YES')
else:
print('NO')