Exemplo: Função com Strings
Vamos escrever uma função que determina se uma palavra é um palíndromo, retornando True se for e False se não for. Um palíndromo é uma palavra que é lida igualmente do começo ao fim ou do fim ao começo.
Exemplos de palíndromos são as palavras OVO e OSSO.
Vamos iniciar declarando a função, que recebe somente um argumento (uma palavra). Podemos chamar a função de palindromo:
def palindromo(palavra):
Note que se a função receber uma palavra que não possui somente letras maiúsculas ou somente letras minúsculas, a função pode gerar um erro. Isto ocorre porque, se for realizada uma comparaçao de duas letras iguais, mas uma maiúscula e uma minúscula, o Python vai interpretá-las como letras diferentes.
Então, se a função receber a palavra "Osso" somente com a primeira letra maiúscula, não queremos retornar False. Para evitar isso, podemos colocar todas as letras da palavra como maiúsculas ou minúsculas.
Podemos usar lower() para tornar as letras minúsculas, ou upper() para torná-las maiúsculas. Escolhendo lower():
palavra = palavra.lower()
Vamos analisar o que a função deverá fazer. Para vermos se a palavra recebida é um palíndromo, precisamos comparar sua primeira letra com a última, sua segunda letra com a penúltima e assim por diante. Se, em algum momento, encontrarmos letras diferentes, a palavra não será um palíndromo. Caso contrário, ela será.
Podemos percorrer a palavra da mesma forma que percorremos uma lista, usando seus índices. Ou seja, usando um for com range.
É importante lembrar que assim como lista[0] e lista[1] são, respectivamente, o primeiro e o segundo elementos da lista,
Então, queremos comparar palavra[0] com palavra[−1], palavra[1] com palavra[−2], palavra[2] com palavra[−3], e assim por diante, até chegarmos no meio da palavra.
Neste momento, nos deparamos com 2 possíveis cenários:
I. A palavra tem um número ímpar de letras e temos uma letra no meio, que, independente de qual for, não vai influenciar se a palavra é ou não um palíndromo.
Exemplo:
r e v i v e r
II. A palavra tem um número par de letras e não existe uma letra central.
Exemplo:
e s s e
Note que, em ambos os casos, precisamos somente percorrer o valor inteiro da metade do comprimento da palavra, ou seja:
len(palavra)//2
Podemos criar um for usando a variável i para percorrer len(palavra)//2 valores:
for i in range(len(palavra)//2):
Precisamos checar se o elemento 0 é diferente do elemento −1 da palavra, se o elemento 1 é diferente do elemento −2 da palavra e assim por diante. Generalizando, checaremos se o elemento i é diferente do elemento −(i+1) da palavra.
Podemos fazer isso com um if:
if palavra[i] != palavra[-(i+1)]:
Se este for o caso, encontramos uma letra que não segue as regras dos palíndromos e podemos retornar False:
return False
Agora, se terminarmos o laço e em nenhum momento a função retornar False e interromper a sua execução, é sinal que todas as letras da palavra seguem as regras dos palíndromos, então podemos retornar True:
return True
Abaixo está a função completa:
def palindromo(palavra): palavra = palavra.lower() for i in range(len(palavra)//2): if palavra[i] != palavra[-(i+1)]: return False return True