Introdução à programação e aos algoritmos

João Araujo Ribeiro · Capítulo 80 de 103

Páginas do PDF

Introdução à programação e aos algoritmos

6.3 Operações Sobre Strings

if palavra == palavra[::-1]:

O fatiamento de frase devolve a string invertida. Se forem iguais,

o resultado da comparação é True. Simples, não?

 

EXERCÍCIO 6.4

 

Escreva uma função que receba uma string como parâmetro e escreva-a invertida,

usando apenas o fatiamento. Ex.: ‘celacanto provoca maremoto’ imprime

‘otomeram acovorp otnacalec’. Dica: o passo pode ser negativo.

 

EXERCÍCIO 6.5

 

Tente outras formas de testar se uma palavra é um palíndromo. Tente outro

fatiamento.

 

EXERCÍCIO 6.6

 

O teste de palíndromo desta seção tem um grande problema: ele não diferencia

maiúsculas de minúsculas. Desse modo, ‘Ovo’ não seria identi cado como

palíndromo. Como se pode consertar isso? Pesquise a função de Python

‘lower()’ que transforma maiúsculas em minúsculas.

 

6.3 OPERAÇÕES SOBRE STRINGS

Python possui dezenas de funções que atuam sobre strings. Seria repetitivo listar todas as suas funções. Algumas são bastante úteis; outras são mais raras de serem usadas. De qualquer modo, vale o conselho de sempre: antes de partir para a programação de suas próprias funções, confira se Python já não possui o que você quer como uma função embutida ou por meio de módulos.

Algumas funções mais usadas são:

s.isalpha() / s.isdigit() / s.isspace() Retorna True se a string s é composta só de letras / só de dígitos / só de caracteres de espaço. Caracteres de espaço incluem caracteres de nova linha (\n) e tabulação (\t)).

s.lower() / s.upper() Retorna uma cópia da string s com todos os caracteres em minúsculas / maiúsculas.

s.startswith(outra) / s.endswith(outra) Retorna True se a string s começa/termina com “outra” string.

s.count(outra) Retorna o número de vezes que a string “outra” aparece em s.

s.strip() Retorna uma cópia da string s com todos os caracteres de espaço (que incluem caracteres de nova linha (\n) e tabulação (\t)) removidos.

s.find(outra) Faz busca de “ outra” na string s e retorna o primeiro índice em que “outra” ocorre. Retorna –1 se não encontrar.

s.replace(antiga, nova) Retorna uma string na qual todas as ocorrências da string “antiga” foram substituídas pela string “nova”.

s.split(delimitador) Retorna uma lista de substrings separadas por um delimitador.

s.join(lista) Junta os elementos da lista usando uma string como delimitador.

Essas funções resolvem muitos problemas facilmente.

Um par de funções muito útil é split() e join(). Vamos usá-los para resolver um problema de formação. Veja o Programa 6.10.

nome = ‘João Araujo Ribeiro’

lista = nome.split(‘ ‘)

print (lista)

lista[1] = lista[1][0] +’.’

print (lista)

lista[0],lista[1],lista[2] = lista[2],lista[0],lista [1]

lista[0] += ‘,’

print (lista)

nome = ‘ ‘.join(lista)

print (nome)

 

■ Programa 6.10: Programa que formata um nome.

 

O resultado deste programa é:

[‘João’, ‘Araujo’, ‘Ribeiro’]

[‘João’, ‘A.’, ‘Ribeiro’]

[‘Ribeiro,’, ‘João’, ‘A.’]

Ribeiro, João A.

O que foi feito no programa? Na linha 2, lista = nome.split(‘

‘) , a string nome foi dividida em seus componentes. Dessa forma, cada palavra foi colocada em uma posição na lista criada. O elemento que serviu para separar as palavras foi o ‘ ‘, um espaço em branco.

A cada passo o programa imprime a variável para que você

possa acompanhar o seu desenvolvimento.

Na linha 4,

lista[1] = lista[1][0] +’.’

foi feito um fatiamento e uma concatenação. Entender isso torna-se mais fácil se dividimos a operação em várias etapas:

nome_meio = lista[1]

lista[1] = nome_meio[0] + ‘.’

Só lembrando: listas são mutáveis e strings são imutáveis. Não

se esqueça disso.

Voltando ao trecho do programa. Uma lista de strings comporta-

se como uma matriz bidimensional. Deste modo, com dois índices podemos ter acesso a um elemento específico das strings referenciadas por lista. Assim, lista[1][0] é uma string. Concatenando com o ponto, obtemos ‘A.’.

A linha 6,

lista[0],lista[1],lista[2] = lista[2],lista[0],lista [1]

nem era necessária. Está aí para mostrar que posso fazer atribuições de mais de uma variável simultaneamente, no caso, três variáveis. Não há problemas de atribuição, pois Python avalia primeiro a expressão do lado direito e só então faz a atribuição em sequência de todas as variáveis.

A linha 7 simplesmente concatena uma vírgula à primeira string da lista, para formar ‘Ribeiro,’. “Ah, então podemos modificar uma string! Não, não podemos. Uma string é imutável. O que aconteceu foi que lista[0] referenciava ‘Ribeiro’ e foi criada uma nova string com o conteúdo ‘Ribeiro,’. A string anterior virou lixo na memória.

A linha 9, nome = ' '.join(lista), também é desnecessária, embora sirva para demonstrar bem o uso de join(). A função join() irá unir todos os elementos da lista, separados pelo caractere ‘ ‘. Assim, entre cada elemento da lista é colocado o caractere espaço.

Mencionei que algumas linhas eram desnecessárias, pois existe uma solução mais direta no Programa 6.11:

1 nome = ‘João Araujo Ribeiro’

2 lista = nome.split(‘ ‘)

3 print (lista)

4 nome_formatado = lista[-1] + ‘, ‘ + lista[1] [0] + ‘. ‘ + lista[0]

5 print (nome_formatado)

 

■ Programa 6.11: Programa que formata um nome. Versão

mais direta.

 

O resultado será o mesmo.

 

EXERCÍCIO 6.7