Jump to content

palíndrome em python funcional


crislanio_macedo

Recommended Posts

Olá pessoal, quando testo essa função nunca retorna False:

Ex: L= "cadeira" True L= "arara" True L="osso"

def palindrome(L)
if not L or (len (L) == 1)
	return True
elseif ((L[0] == L[ (len(L)-1) ]) and palindrome (L[1:(len(L)-1)] ):
	return True
else:
	return False

me ajudem, não estou a entender, uma vez que o python era pra fazer avaliação curto-circuito.

Att

Link to comment
Share on other sites

crislanio_macedo,

Esse código não compila, sequer:

  • Falta-te : após def palindrome(L)
  • Falta-te : após if not L or (len (L) == 1)
  • Não existe elseif mas sim elif
  • Tens uma abertura de parênteses a mais logo a seguir ao «elseif»

Corrigindo estes erros, obtemos:

def palindrome(L):
   if not L or (len (L) == 1):
       return True
   elif (L[0] == L[ (len(L)-1) ]) and palindrome (L[1:(len(L)-1)] ):
       return True
   else:
       return False

Podemos agora (finalmente) testar o teu código:

~ $ python3 -i crislanio.py
>>> palindrome('cadeira')
False
>>> palindrome('arara')
True
>>> palindrome('osso')
True

Nota: não estive a analisar o teu código para tentar descobrir erros de lógica ou outros bugs, apenas corrigi a tua sintaxe.

Uma possível solução que me parece mais «pythónica». Sei que não é «funcional» (ou seja, não é uma solução recursiva), mas parece-me ser uma tradução bastante mais directa do algoritmo propriamente dito:

def palindrome(p):
   for a, b in zip(p, reversed(p)):
       if not a == b:
           return False
   return True
Edited by pwseo
adicionada solução alternativa
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.