Обратный Python () для палиндромов - PullRequest
6 голосов
/ 05 марта 2011

Я только начинаю работать с python и пытаюсь проверить введенную пользователем строку как палиндром.Мой код:

x=input('Please insert a word')
y=reversed(x)
if x==y:
    print('Is a palindrome')
else:
    print('Is not a palindrome')

Это всегда возвращает ложь, потому что у становится что-то вроде <reversed object at 0x00E16EF0> вместо обратной строкиО чем я не знаю?Как бы вы решили написать код этой проблемы?

Ответы [ 6 ]

17 голосов
/ 05 марта 2011

Попробуйте y = x[::-1]. Это использует сплайсинг, чтобы получить обратную строку.

reversed(x) возвращает итератор для зацикливания символов в строке в обратном порядке, не строка, которую можно напрямую сравнить с x.

8 голосов
/ 05 марта 2011

reversed возвращает итератор, который можно преобразовать в строку, используя метод join:

y = ''.join(reversed(x))
1 голос
/ 30 апреля 2013

Для дальнейшего использования, лямбда из ответов выше для быстрой проверки палиндрома:

isPali = lambda num: str(num) == str(num)[::-1]

пример использования:

isPali(9009) #returns True
0 голосов
/ 20 декабря 2016

Попробуйте этот код:

def palindrome(string):
    i = 0 
    while i < len(string):
        if string[i] != string[(len(string) - 1) - i]:
            return False
        i += 1
    return True

печать палиндром ("Ханна")

0 голосов
/ 11 октября 2016
list(reverse( mystring )) == list( mystring )

или в случае чисел

list(reverse( str(mystring) )) == list( str(mystring) )
0 голосов
/ 24 января 2015

Попробуйте этот код.

def pal(name):
        sto_1 = []
        for i in name:
                sto_1.append(i)

        sto_2 = []
        for i in sto_1[::-1]:
                sto_2.append(i)

        for i in range(len(name)):
                if sto_1[i] == sto_2[i]:
                        return "".join(sto_1), "".join(sto_2)
                else:
                        return "no luck"

name = raw_input("Enter the word :")
print pal(name)
...