docsity

Exemplo: Função com Strings

Vamos escrever uma função que determina se uma palavra é um palíndromo, retornando TrueTrue se for e FalseFalse 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 palindromopalindromo:


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 FalseFalse. Para evitar isso, podemos colocar todas as letras da palavra como maiúsculas ou minúsculas.


Podemos usar lower()lower() para tornar as letras minúsculas, ou upper()upper() para torná-las maiúsculas. Escolhendo lower()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 forfor com rangerange.


É importante lembrar que assim como lista[0]lista[0] e lista[1]lista[1] são, respectivamente, o primeiro e o segundo elementos da lista, lista[1]lista[-1]

pan class="base">lista[1] e lista[2]lista[-2] são o último e o penúltimo elementos da lista.


Então, queremos comparar palavra[0]palavra[0] com palavra[1]palavra[-1], palavra[1]palavra[1] com palavra[2]palavra[-2], palavra[2]palavra[2] com palavra[3]palavra[-3], e assim por diante, até chegarmos no meio da palavra.


Neste momento, nos deparamos com 22 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:


rr ee vv ii vv ee rr


II. A palavra tem um número par de letras e não existe uma letra central.


Exemplo:


ee ss ss ee


Note que, em ambos os casos, precisamos somente percorrer o valor inteiro da metade do comprimento da palavra, ou seja:


len(palavra)//2len(palavra)//2


Podemos criar um forfor usando a variável ii para percorrer len(palavra)//2len(palavra)//2 valores:


 for i in range(len(palavra)//2): 


Precisamos checar se o elemento 00 é diferente do elemento 1-1 da palavra, se o elemento 11 é diferente do elemento 2-2 da palavra e assim por diante. Generalizando, checaremos se o elemento ii é diferente do elemento (i+1)-(i+1) da palavra.


Podemos fazer isso com um ifif:


 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 FalseFalse:


 return False 


Agora, se terminarmos o laço e em nenhum momento a função retornar FalseFalse e interromper a sua execução, é sinal que todas as letras da palavra seguem as regras dos palíndromos, então podemos retornar TrueTrue:


 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 
Registre-se e continue a aula gratuitamente
Você poderá assistir de qualquer dispositivo
leandro-soder-8
pedro-ormond
lidelmar-braga-1
walter-macena
susana-maria-maia-dos-santos
filipe-vila
charles-beserra
etique-te
david-j-yoryor
higor-freitas-4
Outros alunos 1 146 estão fazendo este curso na Docsity
Anterior
Aulas
Materiais
Próximo