2016-05-15 1 views
1

Я хочу знать, является ли слово или фраза палиндром или нет.Как удалить все пробелы и знаки препинания при определении того, является ли слово или фраза палиндром? (python)

Я получаю правильный ответ, когда набираю «гоночный автомобиль».

Но всякий раз, когда я печатаю что-то, что включает в себя знаки препинания, такие как «Это кошка, которую я видел?», Я получаю неправильный ответ.

Это то, что я запрограммировал до сих пор.

Пожалуйста, взгляните и скажите мне, что случилось.

Заранее спасибо.

a1=input("Enter a word or phrase: ") 
a=a1.lower() 
b=len(a) 
c=[] 
for i in range(1,b+1): 
    d=b-i 
    c.append(a[d]) 
e="".join(c for c in a1 if c not in ("!",".",":","?"," ")) 
if e==a: 
print (a1,"is a palindrome.") 
else: 
print (a1,"is not a palindrome.") 
+0

Вам нужно отладить свою программу. Попробуйте добавить 'print (e, a)' непосредственно перед 'if a == a', чтобы увидеть, что вы на самом деле сравниваете. – Alik

+0

В конце предложения, которое вы проверяете, есть знак вопроса? Вы включили это во вход? –

+0

Да, я включил знак вопроса во вход – kim

ответ

1

Это должно нормализовать строку:

s="race. car, " 
"".join(x for x in s if x.isalpha()) 
print s 

дает

racecar 

Вы можете использовать s.isalnum вместо того, чтобы держать числа в строке

И для теста:

if e == e[::-1]: print "palindrome" 
+0

Я изменил свой код на e = "". Join (c для c в a1, если c.isalpha()), но он все еще не работает .. что-то не так с этим? – kim

+0

вы сравниваете ('e == a') строку с исходным вводом, когда вместо этого вы хотите сравнить ее с обратным (' e == e [:: - 1] ') – perreal

0

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

c= a.reverse() 
c.replace (' ','') 
a.replace(' ','') 
If a == c : 
    Print ("pallindrome ") 
Else : 
    Print("not a pallindrome !!) 
+1

Вы уверены, что строки в Python имеют метод 'reverse'? Я не могу найти его в [docs] (https://docs.python.org/3.5/library/string.html) – Alik

+0

Они не входят ни в текущие версии Python 2, ни Python 3. Что вы хотите, если «обратная» функция, используемая в моем ответе, которая принимает любую последовательность, включая «str». – amiller27

+0

'list' есть этот способ. 'str''s нет. – TheRandomGuy

0

То, что вы хотите на самом деле очень проста в Python:

a = [c for c in input() if c.isalpha()] 
if list(reversed(a)) == a: 
    print('palindrome') 
else: 
    print('not palindrome') 
0

Один из вариантов для использования str.translate и передать символы, которые вы хотите удалить в качестве параметра:

import string 

s = 'Was it a cat I saw?' 
s = s.translate(None, string.punctuation + ' ').lower() 
print(s) # wasitacatisaw