2011-03-05 25 views
6

estoy empezando en pitón, y yo estoy tratando de probar una cadena introducida por el usuario como un palíndromo. Mi código es:Python inversa() para palíndromos

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

Esto siempre devuelve false porque y se convierte en algo así como <reversed object at 0x00E16EF0> lugar de la cadena invertida. ¿Qué estoy ignorando? ¿Cómo vas a codificar este problema?

+2

El hecho de que una función se llama como algo que necesitas, eso no significa que puedas usarlo sin verte la definición de t primero. Eche un vistazo a [esta página] (http://docs.python.org/library/functions.html#reversed). 'reversed' devuelve un * iterator *, y estoy bastante seguro de que no es lo que quería. – darioo

+0

¿Qué tal si utilicé: 'y = [x] .reverse'? –

+0

Eso tampoco es lo que quieres por múltiples razones: '[x]' crea una lista de elementos individuales donde el primer elemento es 'x'. Luego, cuando inviertes la lista, ahora obtienes una lista en lugar de un iterador, por lo que 'y' todavía no es una cadena. – user470379

Respuesta

16

Trate y = x[::-1]. Esto utiliza empalme para obtener el reverso de la cadena.

reversed(x) un iterador para recorrer a través de los caracteres en la cadena en orden inverso, no una cadena se puede comparar directamente a x.

+2

Esto no es una buena idea en el caso de grandes cadenas y listas. –

8

reversed un iterador, que se puede convertir en una cadena utilizando el join método:

y = ''.join(reversed(x)) 
+0

Mejor aún, 'str (invertida (x))' – kindall

+4

@kindall '' – user470379

+1

Ahhhhhhhhrgh, lo siento, pedo cerebro. Supuse que el constructor 'str()' tomaría cualquier iterable y lo concatenaría en una cadena. Esto es, por supuesto, totalmente incorrecto. – kindall

1

Para referencia futura, un lambda de las respuestas de arriba para verificación palíndromo rápida:

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

uso de ejemplo:

isPali(9009) #returns True 
0

Pruebe este código.

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) 
+1

o simplemente: '' '' def PAL (nombre): Nombre retorno == nombre [:: - 1] '' '' –

0
list(reverse(mystring)) == list(mystring) 

o en el caso de los números

list(reverse(str(mystring))) == list(str(mystring)) 
0

Prueba este código:

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

palíndromo de impresión ("Hannah")