Strings em Python
LidoNesta aula, você aprenderá a trabalhar com strings em Python, desde a criação até operações avançadas como fatiamento e formatação com f-strings. Vamos explorar os principais métodos de manipulação de strings e boas práticas para escrever código limpo e eficiente.
Strings são um dos tipos de dados mais fundamentais em Python. Elas representam sequências de caracteres e são usadas para armazenar e manipular texto. Nesta aula, vamos explorar como criar strings, acessar caracteres individuais, fatiar partes de uma string, utilizar métodos essenciais para manipulação e formatar strings de maneira elegante usando f-strings. Ao final, você terá uma base sólida para lidar com texto em seus programas.
Vamos começar com a criação de strings e depois avançar para tópicos mais complexos, sempre com exemplos práticos para facilitar o entendimento.
Criação
Em Python, strings podem ser criadas de várias maneiras. A forma mais comum é usar aspas simples ('...') ou duplas ("..."). Para strings que ocupam múltiplas linhas, usamos aspas triplas ('''...''' ou """..."""). A escolha entre aspas simples e duplas geralmente depende do conteúdo da string: se a string contém aspas simples, é conveniente usar aspas duplas para delimitá-la, e vice-versa.
Além disso, Python oferece funções como str() para converter outros tipos de dados em strings. Aqui estão exemplos de criação:
# Usando aspas simples
nome = 'Alice'
# Usando aspas duplas
frase = "Olá, mundo!"
# Usando aspas triplas para múltiplas linhas
paragrafo = """Esta é uma string
que ocupa várias linhas."""
# Convertendo outros tipos para string
idade = 30
idade_str = str(idade)
print(nome)
print(frase)
print(paragrafo)
print(idade_str)É importante notar que strings em Python são imutáveis: uma vez criadas, não podem ser alteradas. Qualquer operação que pareça modificar uma string na verdade cria uma nova string. Isso é uma característica de design que traz eficiência e segurança ao código.
Indexação e fatiamento
Strings são sequências, portanto podemos acessar caracteres individuais usando índices. Em Python, a indexação começa em 0. Também podemos usar índices negativos para acessar caracteres a partir do final da string: -1 é o último caractere, -2 o penúltimo, e assim por diante.
Fatiamento (slicing) permite extrair substrings especificando um intervalo de índices no formato [início:fim] (o fim é exclusivo). Se omitirmos o início, Python assume 0; se omitirmos o fim, assume o comprimento da string. Também podemos especificar um passo (step) para pular caracteres.
texto = "Python é incrível"
# Acessando caracteres
print(texto[0]) # P
print(texto[-1]) # l
# Fatiamento
print(texto[0:6]) # Python
print(texto[7:]) # é incrível
print(texto[:6]) # Python
print(texto[::2]) # Pto écrvl (pulando de 2 em 2)
# Invertendo a string
print(texto[::-1]) # lévircni é nohtyPEntender fatiamento é crucial para manipular strings de forma eficiente, como extrair partes de URLs, nomes de arquivos, ou dados formatados. Lembre-se de que os índices podem ser negativos e o passo também, permitindo operações poderosas em uma única linha.
Métodos essenciais
Python fornece uma vasta gama de métodos para strings. Vamos destacar os mais úteis no dia a dia:
upper()elower(): convertem para maiúsculas/minúsculas.strip(): remove espaços em branco das extremidades (também existemlstrip()erstrip()).replace(): substitui uma substring por outra.split(): divide a string em uma lista com base em um delimitador.join(): junta uma lista de strings em uma única string usando um separador.find()eindex(): localizam a posição de uma substring.startswith()eendswith(): verificam prefixo/sufixo.count(): conta ocorrências de uma substring.
Vamos ver exemplos práticos:
mensagem = " Olá, Mundo! "
# Limpeza e conversão
print(mensagem.strip()) # "Olá, Mundo!"
print(mensagem.upper()) # " OLÁ, MUNDO! "
print(mensagem.lower()) # " olá, mundo! "
# Substituição
print(mensagem.replace("Mundo", "Python")) # " Olá, Python! "
# Divisão e junção
palavras = mensagem.split(",")
print(palavras) # [' Olá', ' Mundo! ']
lista = ["Python", "é", "incrível"]
print(" ".join(lista)) # "Python é incrível"
# Busca e contagem
frase = "O rato roeu a roupa do rei de Roma"
print(frase.find("roeu")) # 7
print(frase.startswith("O")) # True
print(frase.endswith("Roma")) # True
print(frase.count("r")) # 6 (inclui maiúsculas? não, é case-sensitive)Dominar esses métodos permitirá que você manipule textos facilmente, desde validação de entradas até processamento de dados.
f-strings
As f-strings (format strings) foram introduzidas no Python 3.6 e revolucionaram a formatação de strings. Elas permitem incorporar expressões Python diretamente dentro de strings, prefixando a string com f ou F. As variáveis ou expressões são colocadas entre chaves {}.
Além de simples substituição, f-strings suportam especificadores de formato avançados, como controle de precisão, alinhamento, preenchimento e conversão para diferentes bases.
nome = "Alice"
idade = 30
# Uso básico
print(f"Meu nome é {nome} e eu tenho {idade} anos.")
# Expressões
print(f"Em 5 anos, terei {idade + 5} anos.")
# Formatação de números
pi = 3.14159265
print(f"Valor de pi: {pi:.2f}") # dupla precisão, 2 casas decimais
# Alinhamento e preenchimento
print(f"{nome:>10}") # alinha à direita em 10 espaços
print(f"{nome:<10}") # alinha à esquerda
print(f"{nome:^10}") # centraliza
# Base numérica
numero = 255
print(f"Em hexadecimal: {numero:#x}") # 0xff
print(f"Em binário: {numero:b}") # 11111111As f-strings são a forma recomendada de formatação em Python moderno, pois são mais legíveis e eficientes do que as antigas % ou str.format(). Sempre que precisar combinar texto com variáveis, prefira f-strings.
Boas práticas e observações
Ao trabalhar com strings, siga estas boas práticas:
- Use f-strings para formatação, a menos que precise de compatibilidade com versões anteriores ao Python 3.6.
- Para strings longas ou com muitas concatenações, evite usar
+repetidamente; prefirajoin()ou f-strings. - Lembre-se de que strings são imutáveis; operações que parecem modificar strings criam novas, o que pode impactar desempenho em loops grandes.
- Use métodos como
strip()para limpar entradas do usuário. - Quando precisar de expressões regulares, combine métodos de strings com o módulo
rese necessário.
Com esses conceitos, você está pronto para lidar com textos em Python de forma eficiente e elegante.
Exercícios
Crie uma string com seu nome completo e imprima apenas o primeiro nome e o sobrenome usando fatiamento.
✓ Resposta:nome_completo = "João da Silva" # Supondo que o nome tenha apenas dois nomes primeiro = nome_completo.split()[0] sobrenome = nome_completo.split()[-1] print(primeiro, sobrenome) # Ou usando fatiamento se soubermos as posições: # primeiro = nome_completo[:4] # "João" # sobrenome = nome_completo[8:] # "Silva"Dada a string "Python é uma linguagem poderosa", conte quantas vezes a letra "a" aparece (ignorando maiúsculas/minúsculas) e imprima o resultado.
✓ Resposta:frase = "Python é uma linguagem poderosa" # Converter para minúsculas e contar contagem = frase.lower().count('a') print(contagem) # Saída: 4Escreva uma função que receba uma string e retorne a mesma invertida. Teste com "Python".
✓ Resposta:def inverter_string(s): return s[::-1] print(inverter_string("Python")) # nohtyPFormate a seguinte variável para exibir um número com duas casas decimais e separador de milhar:
populacao = 12345678(exiba como 12.345.678,00? Não, use vírgula para milhar e ponto para decimal? Vamos usar padrão brasileiro: 12.345.678).✓ Resposta:populacao = 12345678 print(f"{populacao:,.2f}") # 12.345.678,00? Na verdade, isso usa ponto como separador de milhar e vírgula para decimal. Para formato brasileiro, precisamos de mais trabalho. # Uma solução simples: print(f"{populacao:,}".replace(",", ".")) # 12.345.678 # Para duas casas decimais com vírgula: print(f"{populacao:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")) # 12.345.678,00Extraia o domínio de um email (parte após '@') usando métodos de strings. Exemplo: "usuario@exemplo.com" deve retornar "exemplo.com".
✓ Resposta:email = "usuario@exemplo.com" dominio = email.split('@')[1] print(dominio) # exemplo.com