domingo, 24 de junio de 2018

Palíndromos en Python

Reto: Palíndromos

Dada una cadena decir si es un palíndromo.


También puede ver la entrada: Palíndromos en una frase


Método 1

Pedimos al usuario una palabra y la convertimos a minúsculas. Por ejemplo, Radar se transforma en radar y ahora comparamos el primer caracter con el último, el segundo con el anteúltimo y así sucesivamente. Pero no es necesario comparar todos, es suficiente con comparar la mitad de ellos para no duplicar trabajo.

def esPalindromo(palabra):  
 for i in range(0,int(len(palabra)/2)): #Es suficiente con analizar la mitad  
  if palabra[i]!=palabra[-i-1]:
   return False
 return True
palabra=input('Escriba una palabra: ').lower()  
print(palabra, '¿es un palindromo?',esPalindromo(palabra))  



Método 2

Pedimos al usuario una palabra y la convertimos en una lista. Distinguimos dos casos según la longitud de la palabra sea par o impar.

y=input('Dime una palabra: ')
x=list(y)
z=len(x)
i=z/2
if z%2==0:
  m=x[0:int(i)]
  m.reverse()
  q=x[int(i):int(z)]
  if m==q:
    print('Es un Palíndromo')
  else:
    print('No es un Palíndromo')
else:
  h=(z/2)-0.5
  m=x[0:int(h)]
  m.reverse()
  q=x[int(h+1):int(z)]
  if m==q:
    print('Es un Palíndromo')
  else:
    print('No es un Palíndromo')



Método 3

Pedimos una palabra al usuario y convertimos todos sus caracteres en minúsculas. Esto se hace para que al poner por ejemplo Menem nos diga que si es un palíndromo.

Para hacer el reverso del string y lo más sencillo es hacer y[::-1]. De esta forma al comparar una cadena alfanumérica con su reverso si son iguales entonces sabemos que se trata de un palíndromo.

y=input('Dime una palabra: ').lower()
if y==y[::-1]:
  print('Es un Palíndromo')
else:
  print('No es un Palíndromo')



Método 4

En este método la sentencia else sorprendentemente se sale del if.

y=input('Dime una palabra: ')
z=list(y)
x=-1
w=len(z)
while x<w:
  x+=1
  w-=1
  if z[x]!=z[w]:
    print('No es un Palíndromo')
    break
else:
  print('Si es un Palíndromo')



Método 5

Usamos una variable booleana de control.

p=input('Dime una palabra: ').lower()
es=True
for i in range(len(p)):
  if p[i]!=p[len(p)-i-1]:
    es=False
if es:
  print('Si es un palíndromo')
else:
  print('No es un palíndromo')



Método 6

Utilizamos ''.join(reversed(x)) para darle la vuelta a x y darle ese valor a y.

x=input('Dime una palabra: ').lower()  
y=''.join(reversed(x))
if y==x:
 print('Es un Palíndromo')
else:
 print('No es un Palíndromo')



Método 7

Invierte el orden de los elementos de la lista z.

y=input('Dime una palabra: ').lower()
x=list(y)
z=list(x)
z.reverse()
if z==x:
 print('Es un Palíndromo')
else:
 print('No es un Palíndromo')



Método 8

Usando la recursividad.
  • si la palabra tiene cero letras o una letra si es un palíndromo
  • de lo contrario compara la primera y la última letra de la palabra
  • si son diferentes no es un palíndromo
  • si son iguales
  • eliminamos la primera y la última letra de la palabra
  • volvemos a llamar a la función con esta palabra más pequeña

#usando la recursividad
def palindromo(palabra):
  if len(palabra)<=1: #si la palabra tiene cero letras o una letra si es un palíndromo
    print("Si es un palindromo")
  else:               #de lo contrario
    if palabra[0]!=palabra[-1]:  #compara la primera y la última letra de la palabra
      print("No es un palindromo") #si son diferentes no es un palíndromo
    else:                          #si son iguales
      palabra=palabra[1:-1]        #elimina la primera y la última letra del string
      palindromo(palabra)          #vuelve a llamar a la función con este string más pequeño

candidato=input('Dime una palabra: ').lower()
palindromo(candidato)


Nota

En la película La llegada (2016) la protagonista es una linguista que habla del nombre de Hannah indicando que es un palíndromo.

No hay comentarios:

Publicar un comentario