Seção 7.0–7.3 — Imutabilidade, verificação, contagem e pesquisa
Diferentemente das listas, as strings em Python são imutáveis: não é possível alterar um caractere individual de uma string diretamente. Qualquer tentativa de atribuir um valor a um índice gera um erro do tipo TypeError:
Para modificar caracteres individuais, uma estratégia é converter a string em uma lista usando list(), fazer as alterações e depois converter de volta com "".join():
O método join() concatena todos os elementos de uma lista usando a string à esquerda como separador. Com "" (string vazia), os caracteres são simplesmente reunidos sem nenhum separador.
Python oferece métodos práticos para verificar se uma string começa ou termina com determinado texto, sem precisar acessar cada caractere manualmente.
Os métodos startswith() e endswith() retornam True ou False e são sensíveis a maiúsculas e minúsculas:
Para fazer verificações sem distinguir maiúsculas de minúsculas, use lower() ou upper() primeiro. Esses métodos retornam uma nova string convertida, sem alterar a original:
O operador in verifica se uma substring está contida dentro de outra string. Também é sensível a maiúsculas e minúsculas:
Para ignorar maiúsculas ao usar in, aplique lower() ou upper() antes da verificação:
O método count() conta quantas vezes uma substring aparece dentro de uma string. A busca é sensível a maiúsculas e não conta sobreposições:
Note que count("tigre") retorna 3 porque "tigres" contém "tigre". Já count("tigres") retorna 2, pois conta somente as ocorrências exatas de "tigres".
Para localizar a posição de uma substring dentro de uma string, usamos o método find(). Ele retorna o índice da primeira ocorrência ou -1 se não encontrar:
O método rfind() funciona como find(), mas busca a partir do final da string (retornando a última ocorrência):
Ambos aceitam parâmetros opcionais de início e fim para limitar o intervalo de busca:
Para encontrar todas as ocorrências de uma substring, podemos usar um laço while que chama find() repetidamente, avançando a partir da última posição encontrada:
A variável p serve como marcador: começa em 0 e a cada iteração avança um passo além da última ocorrência encontrada (p += 1). Quando find() retorna -1, a condição while p > -1 termina o laço.
Leia duas strings. Verifique se a segunda ocorre dentro da primeira e imprima a posição de início.
Exemplo: 1ª string: AABBEFAATT, 2ª string: BE
Saída: BE encontrado na posição 3 de AABBEFAATT
Leia duas strings e gere uma terceira com os caracteres comuns às duas strings lidas (cada caractere comum aparece uma vez no resultado).
Exemplo: 1ª: AAACTBF, 2ª: CBT → Resultado: CBT
Leia duas strings e gere uma terceira apenas com os caracteres que aparecem em somente uma delas (diferença simétrica).
Exemplo: 1ª: CTA, 2ª: ABC → 3ª: BT
Leia uma string e imprima quantas vezes cada caractere aparece.
Exemplo: String: TTAAC → T: 2x, A: 2x, C: 1x
Leia duas strings e gere uma terceira na qual os caracteres da segunda foram retirados da primeira.
Exemplo: 1ª: AATTGGAA, 2ª: TG → 3ª: AAAA
Leia três strings. Imprima o resultado da substituição, na primeira, dos caracteres da segunda pelos da terceira (substituição caractere a caractere).
Exemplo: 1ª: AATTCGAA, 2ª: TG, 3ª: AC → Resultado: AAAACCAA