crislanio_macedo Posted February 2, 2016 at 10:56 PM Report Share #592979 Posted February 2, 2016 at 10:56 PM 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 More sharing options...
pwseo Posted February 7, 2016 at 06:00 PM Report Share #593252 Posted February 7, 2016 at 06:00 PM (edited) 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 February 7, 2016 at 06:07 PM by pwseo adicionada solução alternativa Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now