Python: Fundamentos de Strings

Última atualização: 2026-09-22

O tipo de dado mais comum com que você vai trabalhar não são números — é texto. Nomes de usuário, emails, artigos, dados JSON, HTML... todas strings. Esta lição cobre sistematicamente as operações de string do Python.


Métodos de string relacionados:isalnum() isalpha() isdigit() replace() index() lower() split() strip() find() join() int() len()

1. Três Tipos de Aspas

Python permite três formas de definir strings:

PYTHON
# Aspas simples
s1 = 'Hello'

# Aspas duplas
s2 = "Hello"

# Aspas triplas (strings multilinha)
s3 = """Esta é a primeira linha
Esta é a segunda linha
Esta é a terceira linha"""

Aspas simples e duplas são equivalentes — escolha uma e mantenha consistência:

PYTHON
# Estas duas são equivalentes
name = 'João Silva'
name = "João Silva"

Mas se sua string contiver aspas, você precisará misturar:

PYTHON
# String tem aspas simples, envolva com aspas duplas
text = "It's a beautiful day"
print(text)              # It's a beautiful day

# String tem aspas duplas, envolva com aspas simples
text = 'He said: "Hello!"'
print(text)              # He said: "Hello!"

# Ou use um caractere de escape (não recomendado, prejudica legibilidade)
text = 'It\'s a beautiful day'
💡 Dica: É recomendado usar aspas duplas consistentemente. Texto em inglês frequentemente contém apóstrofos (don't, it's) — com aspas simples você precisaria escapá-los. Aspas duplas evitam esse problema.

(1) Aspas Triplas: Ótimas para Texto Multilinha

Aspas triplas (""" ou ''') preservam quebras de linha e formatação:

PYTHON
# Texto multilinha com aspas triplas
message = """Prezado Cliente,

Obrigado por escolher nosso serviço. Seu pedido foi confirmado.
Previsão de entrega: 3 dias úteis.

Se tiver alguma dúvida, entre em contato com o suporte.
Tenha um ótimo dia!"""

print(message)

Saída:

TEXT 📖 Somente leitura
Prezado Cliente,

Obrigado por escolher nosso serviço. Seu pedido foi confirmado.
Previsão de entrega: 3 dias úteis.

Se tiver alguma dúvida, entre em contato com o suporte.
Tenha um ótimo dia!

Aspas triplas são comumente usadas para: texto longo, strings de documentação e descrições de funções.



2. Caracteres de Escape

Alguns caracteres não podem ser escritos diretamente em uma string (como quebras de linha, tabulações ou as próprias aspas). Use caracteres de escape — uma barra invertida \ seguida de um caractere.

Escape Significado
\n Nova linha
\t Tabulação
\\ Própria barra invertida
\' Aspa simples
\" Aspa dupla
PYTHON
print("Primeira linha\nSegunda linha")           # \n nova linha
print("Nome:\tJoão Silva\tIdade:\t25")          # \t alinhamento com tab
print("C:\\Usuários\\João\\Desktop")            # \\ exibe barra invertida
print("Ele disse: \"Olá!\"")                     # \" aspa dupla

Saída:

TEXT 📖 Somente leitura
Primeira linha
Segunda linha
Nome:	João Silva	Idade:	25
C:\Usuários\João\Desktop
Ele disse: "Olá!"

▶ Exemplo: Formatando uma Tabela com Caracteres de Escape (Dificuldade ⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Item	Preço	Qtd	Total
------------------------
Maçã	5.0	3	15.0
Banana	3.5	5	17.5
Leite	12.0	2	24.0
💡 Dica: \t é útil para alinhar texto, mas se os comprimentos do conteúdo variarem, o alinhamento pode não ser perfeito. Para produção, use formatação com f-string ({value:10} para ocupar 10 caracteres de largura).



3. Strings Brutas (Raw Strings)

Se você já escreveu caminhos de arquivo no Windows, já experimentou essa dor:

TEXT 📖 Somente leitura
# Ops! \n é interpretado como nova linha
path = "C:\Users\new_folder\documents"
print(path)
# Saída: C:\Users
#        ew_folder\documents

Solução: prefixe a string com r, informando ao Python "não processe caracteres de escape, exiba como está":

PYTHON
# ✅ String bruta — prefixo r
path = r"C:\Users\new_folder\documents"
print(path)
# Saída: C:\Users\new_folder\documents

Em uma string bruta, cada caractere é ele mesmo — \n não significa mais nova linha, \t não significa mais tabulação.

PYTHON
# Padrões regex (usaremos isso depois)
pattern = r"\d{3}-\d{8}"   # Corresponder números de telefone: 010-12345678

# Caminhos de arquivo
log_path = r"D:\logs\app\2026\06\error.log"

print(f"Caminho do log: {log_path}")
⚠️ Observação: O último caractere de uma string bruta não pode ser uma barra invertida — r"abc\" dará erro. Por quê? Mesmo que \" não seja tratado como escape, o analisador vê a barra invertida como escapando a aspa de fechamento, causando uma string não terminada.



4. Indexação de Strings

Uma string é uma sequência de caracteres, cada um com uma posição (índice). Os índices do Python começam em 0:

PYTHON
text = "Python"
# Índice: 0→P  1→y  2→t  3→h  4→o  5→n

print(text[0])    # P
print(text[1])    # y
print(text[5])    # n

Python também suporta indexação negativa, contando da direita para a esquerda. -1 é o último caractere:

PYTHON
text = "Python"
print(text[-1])   # n (último)
print(text[-2])   # o (penúltimo)
print(text[-3])   # h
print(text[-6])   # P (primeiro)

(1) Diagrama de Índices

TEXT 📖 Somente leitura
Positivo:  0    1    2    3    4    5
       ┌────┬────┬────┬────┬────┬────┐
       │ P  │ y  │ t  │ h  │ o  │ n  │
       └────┴────┴────┴────┴────┴────┘
Negativo: -6   -5   -4   -3   -2   -1

▶ Exemplo: Extrair Informação de um Número de Identidade (Dificuldade ⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Código da região: 110101
Data de nascimento: 1990-01-01
Dígito verificador: 4
💡 Dica: string[6:14] é chamado de fatiamento — abordaremos a seguir.



5. Fatiamento de Strings (Slicing)

Fatiamento extrai uma substring de uma string. Sintaxe: string[início:fim:passo]

PYTHON
text = "Hello, Python!"

# Fatiamento básico: início:fim (fim é exclusivo)
print(text[0:5])      # Hello (caracteres 0 a 4)
print(text[7:13])     # Python

(1) Atalhos

PYTHON
text = "Hello, Python!"

print(text[:5])       # Hello — omita início, do começo até o índice 5
print(text[7:])       # Python! — omita fim, do índice 7 até o fim
print(text[:])        # Hello, Python! — tudo

(2) Passo

PYTHON
text = "Hello, Python!"

print(text[::2])      # Hlo yhn! — a cada 2 caracteres
print(text[1::2])     # el,Pto — começa em 1, a cada 2

(3) Passo Negativo (Inversão)

PYTHON
text = "Hello, Python!"

print(text[::-1])     # !nohtyP ,olleH — inverte a string inteira!
print(text[5:0:-1])   # ,olle — do índice 5 ao 0, direção reversa

(1) ▶ Exemplos de Fatiamento

▶ Experimente

Saída:

TEXT 📖 Somente leitura
www.example.com
www.example
True
Hello
💡 Dica: [::-1] é a forma clássica do Python para inverter uma string — simples e elegante. Observe que o fatiamento nunca levanta IndexError — mesmo se o início ou fim exceder o comprimento da string, Python retorna com segurança o que pode.



6. Métodos Comuns de String

Strings têm muitos métodos embutidos. Vamos cobrir os mais comuns aqui. Não precisa memorizar tudo — saber o que está disponível é suficiente; você memorizará com a prática.

(1) Conversão de Maiúsculas/Minúsculas

PYTHON
text = "Hello, Python!"

print(text.upper())         # HELLO, PYTHON!
print(text.lower())         # hello, python!
print(text.title())         # Hello, Python!
print(text.capitalize())    # Hello, python!

(2) Remoção de Espaços

PYTHON
text = "   Hello, World!   "

print(f"|{text}|")                # |   Hello, World!   |
print(f"|{text.strip()}|")        # |Hello, World!| — ambos os lados
print(f"|{text.lstrip()}|")       # |Hello, World!   | — apenas esquerda
print(f"|{text.rstrip()}|")       # |   Hello, World!| — apenas direita

(3) Busca e Substituição

PYTHON
text = "Hello, Python! Python is fun!"

print(text.find("Python"))      # 7 — posição da primeira ocorrência
print(text.find("Java"))        # -1 — não encontrado, retorna -1
print(text.count("Python"))     # 2 — número de ocorrências

new_text = text.replace("Python", "Java")
print(new_text)                  # Hello, Java! Java is fun!

# replace pode especificar máximo de substituições
partial = text.replace("Python", "Java", 1)
print(partial)                   # Hello, Java! Python is fun!

(4) Métodos de Verificação

PYTHON
print("hello".isalpha())        # True — todas letras
print("hello123".isalpha())     # False — tem dígitos
print("12345".isdigit())        # True — todos dígitos
print("hello123".isalnum())     # True — letras e dígitos
print("hello!".isalnum())       # False — tem ponto de exclamação
print("   ".isspace())          # True — todos espaços
💡 Dica: Estes métodos de verificação são muito úteis para validação de entrada. Por exemplo, verificar se a entrada do usuário são todos dígitos: if user_input.isdigit(): garante que a conversão int() não falhará.

(5) Divisão e Junção

PYTHON
# split(): string → lista
sentence = "I love Python"
words = sentence.split()
print(words)                     # ['I', 'love', 'Python']

# Especifique o delimitador
csv_line = "João Silva,25,São Paulo"
fields = csv_line.split(",")
print(fields)                    # ['João Silva', '25', 'São Paulo']

# join(): lista → string
parts = ["2026", "06", "23"]
date = "-".join(parts)
print(date)                      # 2026-06-23

▶ Exemplo: Limpeza de Dados (Dificuldade ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Passo 1: |João Silva  ,  25  ,  São Paulo|
Passo 2: ['João Silva  ', '  25  ', '  São Paulo']
Nome: João Silva
Idade: 25
Cidade: São Paulo


7. len(): Obtendo Comprimento de String

len() é uma função embutida do Python que retorna o comprimento de uma string (ou outras sequências):

PYTHON
text = "Hello, Python!"
print(len(text))              # 15

# Caracteres acentuados contam como 1 cada
acentuados = "Sãoé"
print(len(acentuados))           # 4

# String vazia tem comprimento 0
print(len(""))                # 0

# Uso comum: limitar comprimento de entrada
username = "João Silva"
if len(username) < 2:
    print("Nome de usuário muito curto")
elif len(username) > 10:
    print("Nome de usuário muito longo")
else:
    print(f"Nome de usuário '{username}' é válido")
💡 Dica: Em Python 3, o comprimento da string conta caracteres, não bytes. len("ç") retorna 1, não 2. Isso torna as operações de string mais intuitivas.



8. Casos de Uso Comuns


Métodos de string relacionados:isalnum() isalpha() isdigit() replace() index() lower() split() strip() find() join() int() len()

❓ Perguntas Frequentes

P Por que o índice final é excluído? Como em text[0:5] não inclui o índice 5?
R Esta é a filosofia de design do Python — intervalos semi-abertos [início, fim). Dois benefícios: 1) text[:5] é fácil de lembrar (primeiros 5 caracteres); 2) text[0:5] e text[5:10] se conectam perfeitamente sem sobreposição ou lacunas. Você apreciará este design depois de se acostumar.

P Aspas simples vs aspas duplas — qual devo usar? Por que Python permite ambas?
R Historicamente, os designers do Python acreditavam em dar escolha aos programadores. Programadores C/Java tendem a usar aspas duplas; programadores JavaScript usam ambas. Recomenda-se usar aspas duplas consistentemente, porque o inglês costuma ter aspas simples (it's, don't, can't), então aspas duplas evitam escape. Mais importante, mantenha consistência dentro de um projeto — não misture.
P Qual a diferença entre find() e index()?
R Eles fazem a mesma coisa — encontrar a posição da substring. Diferença: find() retorna -1 quando não encontrado; index() levanta um erro (ValueError). Use find() por segurança no trabalho diário. Use index() quando tiver certeza de que a substring existe (por exemplo, extraindo de dados de formato fixo).

📖 Resumo



📝 Exercícios

  1. Básico (Dificuldade ⭐): Dado s = "Python programming is fun!", faça o seguinte:

    • Extraia os primeiros 6 caracteres
    • Extraia os últimos 4 caracteres
    • Inverta a string inteira
    • Converta todas as letras para maiúsculas
  2. Intermediário (Dificuldade ⭐⭐): Escreva um validador de email. Dado email = "user@example.com", verifique se:

    • Contém @
    • Há conteúdo em ambos os lados de @ (nenhum lado vazio)
    • Termina com .com, .cn ou .org
    • Exiba cada resultado de verificação (True/False) Dica: Use find() para localizar @, fatiamento para verificar ambos os lados.
  3. Desafio (Dificuldade ⭐⭐⭐): Escreva um limpador de dados. Dado:

    TEXT 📖 Somente leitura
    data = "   João Silva, 25 ,  São Paulo  ;  Maria Souza  ,  30,  Rio de Janeiro  ;  Pedro Santos  ,  22,  Belo Horizonte  "
    

    Divida por ; para obter os dados de cada pessoa, depois divida por , para obter cada campo. Use strip() para limpar cada campo, depois exiba uma tabela alinhada:

    TEXT 📖 Somente leitura
    Nome          Idade Cidade
    ──────────────────────────
    João Silva    25    São Paulo
    Maria Souza   30    Rio de Janeiro
    Pedro Santos  22    Belo Horizonte
    
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%