H. А роза упала на лапу Азора 7.0

Напишите функцию is_palindrome, которая принимает натуральное число, строку, кортеж или список, а возвращает логическое значение: True — если передан палиндром, а в противном случае — False.

Примечание

Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций.

Для определения типа параметра можно воспользоваться функцией type или более продвинутой isinstance.

Пример

Ввод

result = is_palindrome(123)

Вывод

result = False

Ввод

result = is_palindrome([1, 2, 1, 2, 1])

Вывод

result = True

Решение

Довольно интересная задачка – подготовка к следующей теме. Уже знакомые нам алгоритмы определения палиндромов, под новым соусом – нам на вход могут дать число, строку или список. C каждым из этих типов мы уже умеем работать и определять является ли объект палиндромом. Таким образом, вся задача сводится к определению типа данных, которые мы получили в качестве входных данных и приведению их к универсальному виду, чтобы реализовывать меньше вариантов определения “палиндромности” объекта.

Давайте подумаем, каким образом мы можем определить является ли число палиндромом. С одной стороны, если число целое можно использовать алгоритм из задачи P. А роза упала на лапу Азора 2.0. С другой стороны, этот алгоритм не сработает с числом с плавающей запятой и придется его заметно модифицировать. Но, если, к примеру преобразовать число в строку, то можно использовать подход из E. А роза упала на лапу Азора 4.0.
Нам с вами еще не доводилось решать эту задачу с точки зрения списков, но так как и списки и строки объекты итерируемые, а принципы работы с итерируемыми объектами в python схожи, мы можем просто развернуть наш список срезом и проверить его на равенство самому себе до разворота. Фактически мы описали алгоритм решения из E. А роза упала на лапу Азора 4.0.

Таким образом, наша задача сводится к приведению любых числовых типов данных к строке с последующим сравнением результата с его развернутой копией.

Посмотреть код

Решение

Python
def is_palindrome(test):
    if isinstance(test, int) or isinstance(test, float):
        test = str(abs(test))
    return test == test[::-1]
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии