Trabalhando com strings em Python
BásicoAula 5 de 10 do curso Curso de Introdução à programação com Python
O que você vai aprender
- Escreva literais de string, meça e combine strings e use índices e fatias para acessar qualquer caractere ou trecho de um texto.
- Escreva literais de string e combine stringsCrie strings com aspas, sequências de escape e aspas triplas, descubra seu comprimento com
len()e combine-as com+e*. - Selecione caracteres individuais pelo índiceUse índices positivos e negativos para ler qualquer caractere de uma string e evite erros de uma unidade e de string vazia que geram
IndexError. - Extraia partes de uma string com fatiasExtraia subcadeias de caracteres com
[start:stop]e[start:stop:step], use posições omitidas e negativas e preveja exatamente quais caracteres uma fatia inclui.
- Escreva literais de string e combine strings
- Percorra uma string para contar, buscar e criar texto, levando em conta que seus caracteres nunca podem ser alterados no próprio objeto.
- Percorra os caracteres de uma stringVisite cada caractere com laços
forewhile, use posições quando forem relevantes e aplique padrões de contagem, busca e acumulação a textos. - Crie novas strings em vez de alterar as existentesExplique o que significa dizer que strings são imutáveis e produza texto alterado por meio de fatias, concatenação e reatribuição.
- Percorra os caracteres de uma string
- Chame métodos de string para alterar maiúsculas e minúsculas e limpar textos, encontrar e contar subcadeias e verificar o conteúdo de uma string antes de usá-la.
- Altere maiúsculas e minúsculas e limpe textos com métodosChame métodos com a notação com ponto para alterar maiúsculas e minúsculas, remover caracteres indesejados, substituir texto e preencher strings, e encadeie vários métodos.
- Busque texto dentro de uma stringVerifique se uma subcadeia está presente, encontre onde ela começa, conte quantas vezes ocorre e use as posições encontradas para extrair texto.
- Teste e compare stringsVerifique com o que uma string começa, com o que termina ou de quais caracteres é composta, valide entradas antes de convertê-las e preveja como o Python compara e ordena strings.
- Altere maiúsculas e minúsculas e limpe textos com métodos
- Divida uma linha de texto em palavras ou campos com
split()e combine os trechos novamente em uma string comjoin().- Divida uma string em uma lista de partesUse
split()com e sem separador, limite o número de divisões e transforme as partes de uma linha nos valores de que um programa precisa. - Una strings com um separadorCombine várias strings em uma só com
join(), escolha o separador, converta primeiro os itens que não são strings e combinesplit()comjoin()para reorganizar textos.
- Divida uma string em uma lista de partes
- Crie saídas claras inserindo valores em textos com f-strings, formatando números, datas e horários para facilitar a leitura e alinhando resultados em colunas.
- Insira valores em textos com f-stringsEscreva f-strings que inserem os valores de variáveis e expressões em textos e reconheça os estilos mais antigos
format()e%em código existente. - Formate números, datas e horários para facilitar a leituraAdicione especificadores de formato para controlar casas decimais, arredondamento, separadores de milhares, porcentagens, sinais e preenchimento com zeros, e crie datas e horários no formato dos EUA.
- Alinhe a saída em colunasDefina larguras de campo, alinhamento e caracteres de preenchimento, encurte textos longos e combine essas opções para imprimir tabelas e recibos alinhados.
- Insira valores em textos com f-strings
Guia de estudo de Strings em Python
1Crie strings e selecione suas partes
O texto em um programa tem conteúdo e posição. Um nome pode conter um espaço, uma mensagem pode conter uma quebra de linha e um código pode manter suas duas primeiras letras separadas do número. Você pode criar essas strings, combiná-las e selecionar exatamente os caracteres de que precisa. Comece distinguindo a forma como o texto é escrito em Python do valor que ele contém; depois, use uma representação das posições para prever índices e fatias.
1.1 Escreva literais de string e combine strings
Uma string é uma sequência de caracteres do tipo str. Ela pode conter um nome, uma frase, um código ou nenhum caractere. O Python mantém os caracteres em ordem, incluindo espaços e pontuação.
Escreva o valor entre aspas correspondentes
Aspas simples e duplas criam o mesmo tipo de valor: 'hello' e "hello" são iguais. As aspas externas marcam os limites; elas não são caracteres do valor. Escolha aspas que deixem fáceis de ler as aspas internas:
message = "It's late"
reply = 'She said "yes"'
empty = ""
Em 'It's late', o apóstrofo fecha a string cedo demais, causando um SyntaxError. Aspas duplas resolvem isso, ou você pode escrever 'It\'s late'. Use aspas retas no código.
Armazene quebras de linha e barras invertidas
Uma sequência de escape começa com uma barra invertida. O Python lê \n como uma nova linha, \t como uma tabulação e \\ como uma barra invertida. As aspas com escape, \' e \", inserem caracteres de aspas no texto.
text = "a\nb"
print(len(text)) # 3
print(text)
A última chamada imprime a e b em linhas separadas. O valor tem três caracteres: a, uma nova linha e b. As sequências de escape são processadas quando o Python lê o literal. O interpretador interativo exibe uma representação com aspas e sequências de escape onde necessário; print() exibe os próprios caracteres. Por exemplo, "\x41" se torna "A", portanto o interpretador interativo não precisa mostrar a sequência de escape original.
Aspas triplas permitem que um literal ocupe várias linhas. Cada quebra de linha interna se torna um caractere de nova linha:
notice = """Door closed
Use side entrance"""
Uma string bruta tem um r antes das aspas. Em r"C:\new", a barra invertida e n permanecem separados, resultando em seis caracteres. Em "C:\new", \n se torna uma nova linha, resultando em cinco. Literais brutos são úteis quando as barras invertidas fazem parte do texto.
Meça e combine textos
len() conta cada caractere, incluindo espaços: len("Hi there!") é 9, e len("") é 0. Mais precisamente, conta pontos de código Unicode. len("café") é 4 quando é é um ponto de código; len("👍🏽") é 2, embora o emoji pareça um único símbolo.
Use + para concatenar strings e * para repetir uma delas:
first = "Ada"
last = "Lovelace"
full = first + " " + last # "Ada Lovelace"
rule = "-" * 10 # ten dashes
A concatenação não insere nada automaticamente. Sem " ", os nomes se tornam "AdaLovelace". Repetir "ab" zero vezes resulta na string vazia.
Decida se os dígitos são texto ou números
Os dois operandos da concatenação de strings devem ser strings. "Age: " + 30 gera TypeError; "Age: " + str(30) resulta em "Age: 30". Por outro lado, input() retorna texto: "3" + "4" resulta em "34". Para somar seus valores numéricos, converta-os primeiro: int("3") + int("4") resulta em 7.
Principais conclusões
- Uma string armazena uma sequência ordenada de caracteres; suas aspas externas fazem parte da sintaxe.
é um caractere de nova linha, enquanto literais brutos mantêm a barra invertida e a letra seguinte separadas.len()conta pontos de código, incluindo espaços e pontuação.+une strings sem adicionar espaços;*repete uma string.- Converta texto em números para cálculos e números em texto para concatenação.
1.2 Selecione caracteres individuais pelo índice
Um índice seleciona um caractere por sua posição. O Python começa a contar em zero, portanto a posição de um caractere é uma unidade menor que sua posição em uma contagem comum da esquerda para a direita.
Represente as posições
Para word = "Python", cada caractere tem um índice não negativo e um índice negativo:
| Caractere | P | y | t | h | o | n |
|---|---|---|---|---|---|---|
| A partir do início | 0 | 1 | 2 | 3 | 4 | 5 |
| A partir do fim | -6 | -5 | -4 | -3 | -2 | -1 |
word = "Python"
print(word[0]) # P
print(word[1]) # y
print(word[-1]) # n
Os colchetes após a string selecionam o caractere. O resultado é uma string de comprimento um: o Python não tem um tipo separado para caracteres. Você pode unir caracteres selecionados, portanto word[0] + word[-1] resulta em "Pn".
Para um comprimento n, os índices válidos vão de -n até n - 1 quando n > 0. Índices não negativos contam a partir do início; índices negativos contam a partir do fim. Um índice -k seleciona o mesmo caractere que n - k; nessa palavra de seis caracteres, -2 e 4 selecionam "o".
Distinga o comprimento do último índice
len(word) é 6, mas word[6] gera IndexError: não há um sétimo caractere. O último caractere é word[len(word) - 1], ou simplesmente word[-1]. Ultrapassar qualquer extremidade causa uma falha; word[-7] também gera IndexError.
Um índice deve ser um número inteiro. word[1.0] gera TypeError mesmo que o número de ponto flutuante tenha um valor inteiro. Use // ao calcular uma posição central:
word = "Pyt"
middle = len(word) // 2 # 1
print(word[middle]) # y
O operador / produziria 1.5, que não pode ser usado como índice de uma string. Para um comprimento ímpar, len(word) // 2 seleciona o caractere central. Para um comprimento par, seleciona o caractere central à direita: "Python"[3] é "h".
Forme iniciais a partir dos primeiros caracteres
first = "Grace"
last = "Hopper"
initials = first[0] + last[0]
print(initials) # GH
Cada nome contribui com seu caractere no índice 0. Usar first[-1] contribuiria com "e", a última letra. Esse método exige que cada nome tenha pelo menos um caractere.
Verifique entradas vazias antes de usar índices
A string vazia tem comprimento zero e nenhum índice de caractere válido. ""[0] gera IndexError. Uma verificação de comprimento pode impedir que um programa leia um caractere inexistente:
line = input("Comment: ")
if len(line) > 0 and line[0] == "#":
print("Comment line")
O Python avalia and da esquerda para a direita. Se a verificação de comprimento for falsa, ele ignora line[0]. Inverter os dois testes tentaria primeiro o acesso pelo índice sem proteção. Quando você só precisa saber se uma linha começa com "#", line.startswith("#") também funciona com uma entrada vazia e retorna False.
Principais conclusões
- O índice 0 seleciona o primeiro caractere; o índice -1 seleciona o último.
- O último índice não negativo é
len(text) - 1. - A indexação retorna uma string de um caractere e gera
IndexErrorpara uma posição inexistente. - Use um índice inteiro e verifique se a entrada está vazia antes de selecionar um caractere.
1.3 Extraia partes de uma string com fatias
Uma fatia seleciona uma sequência de caracteres e a retorna como uma string. Ela permite selecionar um prefixo, remover uma terminação ou separar campos que ocupam posições fixas.
O início é incluído; o limite de parada é excluído
Escreva text[start:stop]. Com s = "Monty Python", s[0:5] resulta em "Monty", e s[6:12] resulta em "Python". O espaço está no índice 5, portanto a segunda fatia começa em 6.
Imagine os números da fatia como espaços entre caracteres. O espaço 0 fica antes do primeiro caractere, e o espaço 5 fica depois dos cinco primeiros. Selecionar tudo entre eles fornece cinco caracteres. Para 0 <= start <= stop <= len(text), o comprimento é stop - start.
word = "Monty"
print(word[0:4]) # Mont
print(word[0:5]) # Monty
A posição de parada é a primeira posição excluída. Somar um ao último índice desejado inclui esse último caractere.
Omita um limite
| Fatia | Significado | Resultado para s |
|---|---|---|
s[:5] | Do início até a posição 4 | "Monty" |
s[6:] | Da posição 6 até o fim | "Python" |
s[:] | String inteira | "Monty Python" |
s[-6:] | Últimos seis caracteres | "Python" |
s[:-1] | Tudo, exceto o último caractere | "Monty Pytho" |
Em qualquer posição de divisão k, s[:k] + s[k:] retorna s. As fatias se encontram no mesmo espaço, sem caracteres ausentes ou repetidos.
Limites de fatia além das extremidades são ajustados a elas. "cat"[1:100] é "at"; "cat"[5:] é "". Para uma fatia percorrida para a frente, um início na posição de parada ou depois dela resulta em uma string vazia, como em s[4:2]. Diferentemente de um índice de caractere individual, uma fatia fora do intervalo não gera IndexError.
Escolha um passo
A terceira posição em text[start:stop:step] define a distância entre as posições selecionadas:
letters = "abcdefgh"
print(letters[::2]) # aceg
print(letters[1::2]) # bdfh
print(letters[::-1]) # hgfedcba
Um passo negativo percorre a string de trás para a frente. Com os dois limites omitidos, [::-1] começa no último caractere e visita cada caractere em ordem inversa. Um passo zero gera ValueError. A direção deve ser compatível com os limites: a regra acima, de resultado vazio quando o início está na posição de parada ou depois dela, vale para um passo positivo.
Aplique fatias a um formato fixo
d = "2026-07-04"
year = d[:4]
month = d[5:7]
day = d[8:10]
print(month + "/" + day + "/" + year) # 07/04/2026
As posições funcionam porque esse formato sempre usa quatro dígitos para o ano e dois para o mês e o dia. Um texto com campos de comprimentos variados precisa de uma busca ou divisão.
A inversão também permite testar um palíndromo: word == word[::-1]. "level" passa no teste, mas "Level" falha porque maiúsculas e minúsculas fazem diferença. Atribua clean = word.lower() e teste clean == clean[::-1] para ignorar essa diferença.
Principais conclusões
- Uma fatia inclui seu início e exclui seu limite de parada.
- Limites omitidos e posições negativas facilitam a seleção de prefixos e terminações.
- Limites de fatia fora do intervalo são ajustados às extremidades; um passo zero gera
ValueError. - Um passo negativo percorre a string de trás para a frente;
[::-1]inverte a string inteira. - Fatias em posições fixas dependem de um formato de texto consistente.
2Processe strings caractere por caractere
Um laço pode examinar cada caractere, manter uma contagem acumulada, parar na primeira correspondência ou criar uma nova mensagem. Os mesmos padrões simples servem para muitas tarefas com texto: contar vogais, encontrar um dígito ou ocultar letras selecionadas. Strings também têm um valor fixo depois de criadas. Acompanhar um laço uma passagem por vez mostra como um programa pode produzir texto alterado enquanto a string original permanece intacta e por que atribuir um valor a uma variável é diferente de editar um caractere.
2.1 Percorra os caracteres de uma string
Use um laço quando for necessário tomar uma decisão sobre cada caractere. O laço pode contar correspondências, usar suas posições, parar na primeira correspondência ou reunir os caracteres que devem fazer parte de um resultado.
Visite os caracteres diretamente
for ch in "hi!":
print(ch)
O corpo é executado três vezes, com ch igual a "h", "i" e "!", nessa ordem. Para a string vazia, o corpo é executado zero vezes. Um laço direto sobre caracteres dispensa índice quando você usa apenas o caractere atual.
Para uma contagem, inicialize o contador antes do laço e aumente-o somente quando o teste for satisfeito:
text = "Programming in Python"
count = 0
for ch in text.lower():
if ch in "aeiou":
count += 1
print(count) # 5
Converter para minúsculas também permite encontrar vogais maiúsculas. A string do teste define as vogais contadas; ela não inclui y. Redefinir count dentro do laço faria o total das passagens anteriores se perder.
Use posições quando os caracteres vizinhos forem relevantes
range(len(text)) fornece os índices de zero até o último índice válido. Para uma tarefa que exige a posição e o caractere, enumerate(text) fornece os dois juntos:
for i, ch in enumerate("abc"):
print(i, ch)
Isso imprime 0 a, depois 1 b, depois 2 c. As duas variáveis do laço recebem o índice e o caractere de cada par.
Para comparar vizinhos, o último índice não pode ser a posição atual, pois não há um próximo caractere:
text = "bookkeeper"
pairs = 0
for i in range(len(text) - 1):
if text[i] == text[i + 1]:
pairs += 1
print(pairs) # 3
As correspondências são oo, kk e ee. Com range(len(text)), a última passagem tentaria acessar text[len(text)] e geraria IndexError.
Controle uma posição com while
i = 0
while i < len(text):
print(text[i])
i += 1
O teste usa estritamente <: a posição len(text) está além do fim. O incremento aproxima o laço do término; omiti-lo faz com que o mesmo caractere seja lido para sempre em um texto não vazio. Para percorrer de trás para a frente, comece em len(text) - 1, continue enquanto i >= 0 e subtraia um em cada passagem.
Busque ou reúna caracteres
Para o primeiro dígito em "Room 42B", pare assim que uma correspondência tiver sido usada:
for ch in "Room 42B":
if ch.isdigit():
print(ch) # 4
break
Sem break, os dois dígitos seriam impressos. Para um teste simples de presença, "4" in text já responde sim ou não.
Para reunir texto, comece com result = "" e adicione cada caractere desejado. Para "a b c", adicionar somente quando ch != " " constrói "abc". Atribuir ch = ch.upper() dentro de um laço altera apenas a variável do laço; isso não altera os caracteres armazenados em text.
Principais conclusões
- Um laço
fordireto visita cada caractere em ordem. - Inicialize contadores e acumuladores antes do laço.
enumerate()fornece cada índice junto com seu caractere.- Pare uma posição antes ao ler
text[i + 1]. - Um laço
whileprecisa de um limite seguro e de uma atualização da posição. breakinterrompe uma busca na primeira correspondência.
2.2 Crie novas strings em vez de alterar as existentes
Strings são imutáveis: seus caracteres não podem ser alterados depois que a string existe. Um programa que parece editar texto está criando outra string e escolhendo a qual delas uma variável se referirá.
Leia um caractere, mas não faça uma atribuição a ele
name = "Jane"
name[0] = "D" # TypeError
O índice pode ler "J", mas não pode ser o destino de uma atribuição. del name[0] também gera TypeError. Para obter "Dane", combine o primeiro caractere desejado com a terminação inalterada:
name = "Jane"
name = "D" + name[1:]
print(name) # Dane
O Python primeiro avalia o lado direito, produzindo uma nova string. Em seguida, faz name se referir a esse resultado.
Substitua ou insira em uma posição conhecida
Para um índice não negativo válido i, estas expressões usam fatias diferentes à direita:
| Tarefa | Expressão |
|---|---|
Substituir o caractere em i | text[:i] + new + text[i + 1:] |
Inserir antes do caractere em i | text[:i] + new + text[i:] |
A substituição pula o caractere antigo; a inserção o mantém. Com text = "cat", i = 1 e new = "X", a substituição resulta em "cXt", enquanto a inserção resulta em "cXat".
Converta um índice negativo em seu equivalente não negativo antes de usar esse padrão de substituição. Para o último caractere de "cat", i = len(text) - 1 é 2. Se você colocar -1 diretamente em text[i + 1:], ele se torna text[0:], que acrescenta a string antiga inteira e resulta em "caXcat".
Guarde o resultado de um método
Métodos de transformação seguem a mesma regra de imutabilidade:
msg = "hello"
msg.upper()
print(msg) # hello
msg = msg.upper()
print(msg) # HELLO
A primeira chamada calcula um resultado que o programa descarta. A atribuição guarda o segundo resultado. Métodos de string nunca alteram a string original, mas seus tipos de retorno são diferentes: upper() retorna uma string, find() um número inteiro e isdigit() um valor booleano.
Acompanhe dois nomes para um valor
Após a = "cat" e b = a, ambas as variáveis se referem a "cat". Executar a = a + "s" atribui a a o novo valor "cats"; b ainda se refere a "cat". Nenhum caractere na string antiga compartilhada mudou. a += "s" realiza o mesmo tipo de reatribuição para uma string.
Crie um valor alterado em um laço
word = "secret"
masked = ""
for ch in word:
if ch in "aeiou":
masked += "*"
else:
masked += ch
print(masked) # s*cr*t
print(word) # secret
Cada passagem acrescenta a masked um caractere escolhido. Colocar cada caractere na frente, com result = ch + result, inverte o texto: as passagens por "drawer" constroem "d", "rd", "ard", "ward", "eward" e "reward".
A concatenação repetida é conveniente para exemplos curtos. Quando os trechos já estão em uma lista, "".join(pieces) constrói um resultado diretamente e também pode colocar um separador entre eles.
Principais conclusões
- Uma string não pode ser alterada por atribuição a item ou exclusão de item.
- Substituição e inserção criam novas strings a partir de fatias.
- Guarde o resultado de uma transformação atribuindo-o.
- Reatribuir uma variável deixa as outras variáveis apontando para o valor antigo.
- Um acumulador cria uma nova string, um trecho escolhido por vez.
3Transforme, busque e teste textos com métodos de string
Métodos de string permitem fazer perguntas úteis sobre textos e produzir versões limpas deles. Um programa pode precisar aceitar espaços extras em uma resposta, encontrar um separador ou verificar se uma quantidade pode ser convertida em número. Escolha um método pelo resultado necessário: texto alterado, posição, contagem ou teste booleano. Preste atenção à correspondência exata, ao valor retornado quando uma busca falha e à diferença entre ordem textual e ordem numérica.
3.1 Altere maiúsculas e minúsculas e limpe textos com métodos
Um método é uma função associada a um valor. Métodos de string realizam tarefas comuns, como alterar maiúsculas e minúsculas, remover caracteres das extremidades de uma entrada e substituir texto. Cada chamada retorna um resultado e deixa a string original inalterada.
Chame um método com a notação com ponto
Escreva value.method(arguments), como em "hello".upper(). Os parênteses fazem a chamada acontecer. name.upper sem parênteses se refere ao próprio método; não produz texto em maiúsculas. Escrever upper(name) não encontra uma função independente chamada upper. Use dir("") para listar os métodos de string e help(str.upper) para ler sobre um deles.
Escolha uma operação de maiúsculas e minúsculas
| Método | Resultado para o exemplo |
|---|---|
"Hello".upper() | "HELLO" |
"Hello".lower() | "hello" |
"Hello".swapcase() | "hELLO" |
"the old man".title() | "The Old Man" |
"hELLO wORLD".capitalize() | "Hello world" |
capitalize() altera o primeiro caractere e coloca o restante em minúsculas; title() inicia palavras novamente após caracteres que não são letras. Isso faz "they're".title() se tornar "They'Re", portanto pode ser necessário verificar o uso automático de maiúsculas em títulos.
Para comparações que não distinguem maiúsculas de minúsculas, casefold() trata mais casos em diferentes idiomas do que lower(). "Straße".lower() é "straße", enquanto "Straße".casefold() é "strasse". Normalize maiúsculas e minúsculas nas duas strings antes de compará-las.
Limpe as extremidades do texto
strip() remove caracteres em branco do início e do fim, incluindo espaços, tabulações e novas linhas. Ele preserva o espaçamento interno: " New York \n".strip() é "New York". lstrip() limpa apenas a extremidade esquerda; rstrip() limpa apenas a direita.
Com um argumento, a remoção retira repetidamente qualquer um desses caracteres das extremidades. Ela não remove uma palavra exata:
print("...Wow!!!".strip(".!")) # Wow
print("report.txt".rstrip(".txt")) # repor
print("report.txt".removesuffix(".txt")) # report
O t final de report também pertence ao conjunto de caracteres removidos, portanto desaparece. removeprefix() e removesuffix() removem texto exato de uma extremidade; estão disponíveis no Python 3.9 e em versões posteriores.
Substitua correspondências e encadeie alterações
replace(old, new) substitui cada correspondência exata. Um terceiro argumento limita quantas correspondências são alteradas: "a-b-c".replace("-", "", 1) resulta em "ab-c". Uma substituição vazia exclui as correspondências. Maiúsculas e minúsculas fazem diferença, portanto "Cat cat".replace("cat", "dog") resulta em "Cat dog".
answer = " YES \n"
answer = answer.strip().lower()
print(answer == "yes") # True
As chamadas são executadas da esquerda para a direita: strip() retorna "YES", depois lower() retorna "yes". Um encadeamento funciona quando o próximo método é adequado ao tipo do resultado anterior. Um resultado de busca é um número inteiro, portanto não aceita métodos de limpeza de string.
Para preenchimento, "7".zfill(3) resulta em "007", "Total".ljust(8) adiciona três espaços à direita, e "Hi".center(8, "*") resulta em "***Hi***". rjust() preenche à esquerda. Essas larguras são mínimas; textos mais longos são mantidos por inteiro.
Principais conclusões
- Use a notação com ponto e parênteses para chamar um método de string.
- As operações de maiúsculas e minúsculas têm funções diferentes;
casefold()permite comparações entre idiomas. strip(chars)remove um conjunto de caracteres das extremidades; afixos exatos exigemremoveprefix()ouremovesuffix().replace()encontra texto exato e pode limitar o número de alterações.- Encadeamentos de transformação são executados da esquerda para a direita sobre cada string retornada.
- O preenchimento adiciona caracteres até uma largura mínima.
3.2 Busque texto dentro de uma string
Uma busca pode responder a três perguntas diferentes: se um texto ocorre, onde começa e quantas vezes ocorre. Escolha o resultado adequado à decisão que seu programa precisa tomar.
Escolha um resultado de busca
| Ferramenta | Resultado | Quando não há correspondência |
|---|---|---|
sub in text | Presença como True ou False | False |
text.find(sub) | Primeiro índice inicial | -1 |
text.rfind(sub) | Último índice inicial | -1 |
text.index(sub) | Primeiro índice inicial | Gera ValueError |
text.count(sub) | Número de correspondências sem sobreposição | 0 |
Uma subcadeia de caracteres é uma sequência consecutiva de caracteres. "py" in "happy" é True, mas "hpy" in "happy" é False. A correspondência distingue maiúsculas de minúsculas: "Py" in "python" é False. not in inverte o teste de presença. A string vazia ocorre em toda string.
Encontre a ocorrência desejada
text = "banana"
print(text.find("an")) # 1
print(text.find("an", 2)) # 3
print(text.rfind("an")) # 3
A posição inicial opcional ignora candidatos anteriores. O índice retornado continua contando a partir do início da string inteira. index() retorna a mesma posição quando há uma correspondência, mas seu erro quando não há correspondência o torna útil quando a ausência indica um problema inesperado.
Verifique uma posição antes de extrair uma fatia
email = "maria.lopez@example.org"
at = email.find("@")
if at != -1:
user = email[:at]
domain = email[at + 1:]
print(user) # maria.lopez
print(domain) # example.org
A busca retorna 11. A primeira fatia para antes de @; a segunda começa um caractere depois dele. Se o marcador estivesse ausente, at seria -1. Usá-lo como limite de fatia selecionaria texto perto do fim sem avisar, portanto trate a ausência do marcador antes de extrair as partes.
Não use if text.find("x"): como teste de presença. Uma correspondência no índice 0 é considerada falsa em uma condição, enquanto o valor -1, que indica ausência, é considerado verdadeiro. Use if "x" in text: ou compare explicitamente a posição com -1.
Busque a partir de um marcador conhecido
Para line = "Order #4521 shipped", o número vem depois de # e termina no próximo espaço:
start = line.find("#") + 1
end = line.find(" ", start)
number = line[start:end]
print(number) # 4521
Aqui os dois marcadores existem. Começar a segunda busca em start ignora o espaço anterior, depois de Order. Se os marcadores puderem estar ausentes, verifique cada resultado da busca antes de somar um ou extrair uma fatia; somar um a -1 ocultaria a falha da busca ao transformá-lo em 0.
Conte correspondências completas
"banana".count("a") é 3, e "banana".count("ana") é 1. As duas correspondências possíveis de ana se sobrepõem, portanto count() não conta ambas. Da mesma forma, "aaaa".count("aa") é 2.
Para ignorar maiúsculas e minúsculas, busque em uma versão convertida, como em "python" in sentence.lower(). A busca ainda procura correspondências exatas nessa versão. Contagens e testes de presença podem usar a string convertida diretamente; um índice pertence à string específica em que foi feita a busca.
Principais conclusões
- Use
inpara presença, um método de busca para posição ecount()para frequência. find()erfind()retornam -1 quando o texto está ausente;index()geraValueError.- Verifique um resultado de busca antes de usá-lo como índice ou limite de fatia.
- Um argumento de início ignora correspondências anteriores e mantém os índices relativos à string inteira.
count()conta correspondências sem sobreposição.
3.3 Teste e compare strings
Testes de string retornam valores booleanos que podem orientar uma condição. Eles ajudam você a aceitar entradas que atendem a uma regra e a comparar textos de forma consistente.
Teste as extremidades ou os caracteres
startswith() e endswith() testam textos exatos nas extremidades. Uma tupla permite que um teste aceite várias terminações: name.endswith((".jpg", ".png")). "photo.PNG", com a extensão em maiúsculas, falha nesse teste, a menos que você a converta para minúsculas primeiro.
| Teste | Verdadeiro quando a string não vazia tem… |
|---|---|
isalpha() | Somente letras |
isalnum() | Somente letras ou dígitos |
isdigit() | Somente caracteres de dígitos Unicode |
isdecimal() | Somente caracteres de dígitos decimais |
isspace() | Somente caracteres em branco |
Todos os cinco retornam False para "". As letras não precisam ser inglesas: "café".isalpha() é True. O espaço em "hello world" faz isalpha() retornar falso.
isupper() e islower() examinam caracteres que têm maiúsculas e minúsculas e exigem pelo menos um deles. "ABC1".isupper() é True; o dígito não interfere nas letras maiúsculas. "123" não tem caracteres com maiúsculas e minúsculas, portanto ambos os testes são falsos.
Valide antes da conversão
Um teste de dígitos não descreve todos os números que o Python consegue ler. "-5".isdigit(), "3.5".isdigit() e " 42".isdigit() são falsos porque um sinal, um ponto ou um espaço não é um dígito. Além disso, "²".isdigit() é verdadeiro, embora int("²") falhe. isdecimal() rejeita esse sobrescrito e é adequado para uma entrada de número inteiro não negativo escrita somente com dígitos.
text = input("Tickets: ").strip()
if text.isdecimal() and int(text) > 0:
print("Accepted")
else:
print("Enter a positive whole number")
O teste da string é executado primeiro. Quando é falso, and ignora a conversão, protegendo entradas vazias ou não numéricas. " 12 " se torna "12" e passa no teste; "0" é convertido com segurança, mas falha no teste de valor positivo. Essa regra rejeita deliberadamente entradas com sinal ou ponto decimal.
Uma regra para nome de usuário pode combinar verificações de comprimento e caracteres: 3 <= len(name) <= 12 and name.isalnum(). "ada99" passa, "ada 99" falha no teste de caracteres e "ad" falha no teste de comprimento.
Compare textos limpos
A igualdade exige os mesmos caracteres na mesma ordem. "Yes" == "yes" e "yes " == "yes" são falsos. Para respostas em que maiúsculas, minúsculas e caracteres em branco nas extremidades devem ser ignorados, compare typed.strip().casefold() com expected.strip().casefold().
A ordenação funciona caractere por caractere. O primeiro ponto de código Unicode diferente decide o resultado. ord("A") é 65, ord("Z") é 90 e ord("a") é 97; chr(97) resulta em "a". Assim, "Zebra" < "apple" é verdadeiro. Quando uma string é prefixo da outra, a mais curta vem primeiro: "app" < "apple".
Strings de dígitos também usam a ordem dos caracteres: "10" < "9" é verdadeiro porque "1" vem antes de "9". Converta para números ao comparar quantidades. Letras acentuadas também exigem atenção: ord("é") é 233, portanto "école" > "zoo" é verdadeiro. Essa ordem embutida segue os pontos de código, não a ordem de um dicionário do idioma.
Principais conclusões
- Testes de string retornam valores booleanos; testes de caracteres também verificam se a string não está vazia.
isdecimal()é mais restrito queisdigit()para entradas destinadas aint().- Use um teste de caracteres antes de uma conversão numérica protegida.
- Limpe as duas strings de forma consistente quando maiúsculas, minúsculas e espaços nas extremidades não devem fazer diferença.
- A ordenação de strings usa o primeiro ponto de código diferente; a ordem numérica exige valores numéricos.
4Divida textos em partes e una partes em textos
Uma linha de texto frequentemente contém vários trechos úteis: palavras em uma mensagem, campos em um registro ou partes de um código. Dividir transforma essa linha em uma coleção ordenada que você pode examinar, contar e converter. Unir cria uma string a partir de trechos com um separador escolhido por você. As regras do separador determinam se campos vazios e o espaçamento original são preservados, portanto a escolha é relevante quando você limpa um texto ou precisa reconstruí-lo exatamente.
4.1 Divida uma string em uma lista de partes
split() transforma uma string em uma lista de strings. Uma lista é uma coleção ordenada escrita entre colchetes. Você pode ler um item pelo índice, percorrer os itens ou contá-los com len().
Escolha caracteres em branco ou um separador exato
Sem argumento, split() trata uma sequência de caracteres em branco como um único limite e ignora esses caracteres nas duas extremidades:
words = " the quick brown fox ".split()
print(words) # ['the', 'quick', 'brown', 'fox']
print(len(words)) # 4
print(words[0]) # the
Com um separador explícito, cada ocorrência exata produz uma divisão. Separadores consecutivos preservam um campo vazio:
fields = "red,green,,blue".split(",")
# ["red", "green", "", "blue"]
O terceiro item vazio pode representar um valor que foi deixado em branco. Ele ainda conta como um item da lista.
| Expressão | Resultado |
|---|---|
"a b".split() | ["a", "b"] |
"a b".split(" ") | ["a", "", "b"] |
"a,b".split(", ") | ["a,b"] |
Um separador pode conter vários caracteres, mas todos devem corresponder exatamente. Se nenhum separador ocorrer, o resultado contém a string original inteira como um item. Portanto, dividir usando vírgula e espaço é diferente de dividir usando uma vírgula.
Limite as divisões do texto
O segundo argumento, maxsplit, limita o número de divisões, não o número de itens resultantes:
print("key=value=more".split("=", 1))
# ["key", "value=more"]
print("archive.tar.gz".rsplit(".", 1))
# ["archive.tar", "gz"]
split() começa pela esquerda; rsplit() começa pela direita. Uma divisão pela direita separa a última extensão do arquivo sem dividir nos pontos anteriores.
Leia campos e converta quantidades
line = "Lovelace,Ada,1815"
parts = line.split(",")
if len(parts) == 3:
last = parts[0]
first = parts[1]
year = int(parts[2])
print(f"{first} {last} was born in {year}.")
A saída é "Ada Lovelace was born in 1815.". A verificação de comprimento impede que um item ausente cause IndexError. Ela não verifica se o ano é numérico; isso exige uma regra de entrada separada quando os dados podem ser inválidos.
Cada parte da divisão começa como uma string. Para somar "3 14 15", inicialize total = 0, percorra line.split() e adicione int(part). O resultado é 32; concatenar os trechos sem convertê-los uniria os dígitos.
Um separador explícito mantém os espaços ao redor. "a, b".split(",") resulta em ["a", " b"]. Chame strip() em cada parte se esses espaços forem indesejados.
Reconheça dois resultados relacionados
splitlines() divide nas quebras de linha: "line one\nline two".splitlines() resulta em duas strings. partition("=") sempre retorna uma tupla de três partes: o texto antes do primeiro separador, o separador e o texto depois dele. "user=ada".partition("=") resulta em ("user", "=", "ada"); com "user", resulta em ("user", "", "").
Principais conclusões
split()retorna uma lista ordenada de strings.- A divisão por caracteres em branco agrupa sequências desses caracteres; separadores explícitos preservam campos vazios.
maxsplitlimita as divisões, ersplit()começa pela direita.- Verifique a quantidade de campos antes de acessar índices e converta campos numéricos antes de fazer cálculos.
splitlines()separa linhas;partition()retorna o texto anterior, o separador e o texto posterior.
4.2 Una strings com um separador
join() cria uma string a partir de uma sequência de strings. A string antes do ponto fornece o separador, que aparece entre itens adjacentes.
Coloque o separador primeiro
colors = ["red", "green", "blue"]
text = ", ".join(colors)
print(text) # red, green, blue
Leia isso como “use vírgula e espaço para unir as cores”. Não há separador antes do primeiro item nem depois do último. Você pode alterar o formato da saída mudando apenas o separador:
| Expressão | Resultado |
|---|---|
"".join(["a", "b", "c"]) | "abc" |
"-".join(["a", "b", "c"]) | "a-b-c" |
"\n".join(["a", "b", "c"]) | Um item em cada linha |
join() pertence à string separadora. Escrever ["a", "b"].join(",") gera AttributeError porque a lista não tem um método join. Uma única chamada também se adapta ao número de trechos; você não precisa escrever uma nova sequência de operações + para cada comprimento de lista.
Converta primeiro os trechos que não são strings
Todos os trechos já devem ser strings. ", ".join([1, 2, 3]) gera TypeError. map(str, items) aplica str() a cada item, portanto isto funciona:
items = [1, 2, 3]
text = " ".join(map(str, items))
print(text) # 1 2 3
O str passado a map() é a função de conversão. join() recebe os trechos convertidos e retorna uma string.
Uma string é uma sequência de strings de um caractere, portanto " ".join("ABC") resulta em "A B C". Isso pode ser útil, mas passar uma palavra quando você pretendia passar uma lista de palavras coloca separadores entre seus caracteres.
Reorganize espaços e separadores
text = "too many spaces"
cleaned = " ".join(text.split())
print(cleaned) # too many spaces
Primeiro, a divisão por caracteres em branco produz as três palavras. Uni-las com um espaço cria uma separação consistente e não deixa espaços nas extremidades. O espaçamento original se perde na etapa de divisão.
Com um separador explícito, os campos vazios preservam informações suficientes para reconstruir o texto exato. Se s = "a,,b,", então s.split(",") resulta em ["a", "", "b", ""], e ",".join(...) resulta novamente em "a,,b,". O separador deve ser o mesmo para essa reconstrução exata.
Mudar o separador altera o formato: "-".join("2026/07/04".split("/")) resulta em "2026-07-04". Aqui replace("/", "-") também é uma solução direta.
Reúna um resultado curto a partir de palavras
Para formar uma sigla, divida "portable network graphics", comece com acronym = "" e adicione word[0].upper() para cada palavra. A divisão por caracteres em branco fornece palavras não vazias, portanto seus primeiros caracteres existem. Isso constrói "PNG". Se as letras já estiverem em uma lista, ".".join(["P", "N", "G"]) constrói "P.N.G" sem ponto final.
Principais conclusões
- Chame
join()no separador, passando os trechos como argumento. - Separadores aparecem apenas entre os trechos, e cada trecho deve ser uma string.
- Dividir por caracteres em branco e unir com um espaço padroniza o espaçamento.
- Unir com o mesmo separador explícito pode reconstruir o texto, incluindo campos vazios.
5Formate a saída com f-strings
Uma saída útil combina um valor correto com um formato legível. Uma f-string insere valores e expressões diretamente no texto e permite escolher a aparência de cada campo: casas decimais, agrupamento, sinais, datas ou colunas alinhadas. Mantenha o cálculo e a exibição separados. Um campo pode mostrar duas casas decimais ou um nome abreviado enquanto a variável original mantém seu valor completo, disponível para cálculos posteriores ou outra exibição.
5.1 Insira valores em textos com f-strings
Uma f-string é um literal de string com f ou F antes das aspas de abertura. Dentro dela, as chaves contêm expressões cujos valores são inseridos no texto.
Insira variáveis e expressões
name = "Ada"
age = 36
message = f"{name} is {age} years old."
print(message) # Ada is 36 years old.
Números se tornam texto automaticamente dentro de um campo. A mesma mensagem poderia usar concatenação e str(age), mas a f-string mantém o formato final visível em um só lugar.
As chaves podem conter operações aritméticas, chamadas de métodos ou chamadas de funções:
price = 4.5
qty = 3
print(f"Cost: {price * qty}") # Cost: 13.5
print(f"Name: {name.upper()}") # Name: ADA
word = "Python"
print(f"{len(word)} letters") # 6 letters
O Python avalia cada expressão quando a linha é executada. Uma string armazenada não permanece ligada às variáveis usadas para criá-la. Se qty mudar depois que message tiver sido criada, essa string mantém seus caracteres existentes.
Distinga texto comum de campos
Sem o prefixo, "Hello {name}" é texto comum e mantém suas chaves. A falta do f é um motivo comum para um programa imprimir o nome da variável em vez de seu valor. Com o prefixo, um nome ao qual ainda não foi atribuído um valor gera NameError quando a expressão é executada.
Para exibir uma chave literal, duplique-a:
x = 5
print(f"{{x}} = {x}") # {x} = 5
As chaves duplicadas fornecem o texto literal {x}. O par simples em torno do x final fornece seu valor.
Mantenha legíveis as expressões com aspas
Use o outro tipo de aspas dentro de um campo:
print(f"Shout: {'hi'.upper()}") # Shout: HI
Esse estilo funciona em todas as versões do Python com f-strings, introduzidas na versão 3.6. O Python 3.12 e versões posteriores também permitem reutilizar o tipo de aspas externas dentro do campo. Sequências de escape continuam funcionando em f-strings: f"Name: {name}\nAge: {age}" imprime em duas linhas.
Para uma exibição rápida de depuração, o Python 3.8 e versões posteriores aceitam = após uma expressão. Com x = 5, f"{x=}" resulta em "x=5"; com total = 12, f"{total = }" resulta em "total = 12". Os espaços digitados ao redor da expressão e do sinal de igual aparecem na exibição.
Leia estilos de formatação mais antigos
Código Python existente pode criar o mesmo texto de outras formas:
| Estilo | Exemplo | Resultado |
|---|---|---|
| F-string | f"{name} is {age}" | "Ada is 36" |
| Método de string | "{} is {}".format(name, age) | "Ada is 36" |
| Formatação com porcentagem | "%s is %d" % (name, age) | "Ada is 36" |
str.format() preenche campos entre chaves com seus argumentos. Campos numerados podem reutilizar um argumento: "{0} {1} {0}".format("a", "b") resulta em "a b a". Na formatação com porcentagem, %s insere texto e %d um número inteiro. Reconhecer esses campos ajuda a ler um programa mesmo que ele tenha sido escrito antes de as f-strings se tornarem comuns.
Principais conclusões
- Uma f-string precisa de um prefixo
fe de chaves ao redor de cada expressão. - Os campos são avaliados quando a f-string é executada; o texto armazenado não é atualizado depois.
- Chaves duplicadas exibem chaves literais.
str.format()e a formatação com porcentagem são formas mais antigas de inserir valores.
5.2 Formate números, datas e horários para facilitar a leitura
Um especificador de formato controla como um valor é exibido. Coloque dois-pontos depois da expressão e, em seguida, as instruções: f"{value:spec}". A formatação retorna texto e deixa o valor numérico original inalterado.
Defina casas decimais e entenda o arredondamento
.Nf exibe exatamente N dígitos após o ponto decimal. f"{3.14159:.2f}" resulta em "3.14", f"{2/3:.3f}" resulta em "0.667", e f"{5:.2f}" resulta em "5.00". .0f não exibe ponto decimal: f"{7.6:.0f}" resulta em "8".
O arredondamento usa o valor realmente armazenado. A maioria das frações decimais é armazenada como aproximações binárias muito próximas. O número de ponto flutuante 2.675 é ligeiramente menor que esse decimal exato, portanto f"{2.675:.2f}" resulta em "2.67". Valores exatamente na metade são arredondados para o dígito final par: 0.125 é exibido como "0.12", enquanto 0.375 é exibido como "0.38" com duas casas decimais. f"{2.5:.0f}" resulta em "2". Programas que precisam de cálculos monetários exatos frequentemente armazenam centavos como números inteiros.
Adicione agrupamento e porcentagens
| Especificador | Resultado do exemplo |
|---|---|
f"{1234567:,}" | "1,234,567" |
f"{1234567:_}" | "1_234_567" |
f"{1234567.891:,.2f}" | "1,234,567.89" |
f"{0.256:.1%}" | "25.6%" |
Uma vírgula agrupa milhares; o ponto introduz a precisão decimal. Para um valor em dólares, mantenha o símbolo de dólar fora do campo: com amount = 1250.5, f"${amount:,.2f}" resulta em "$1,250.50".
O tipo % multiplica por 100 e adiciona %. Use uma fração como 0.256 para exibir 25.6%. Se você fornecer 25.6, a porcentagem exibida será multiplicada novamente. Sem uma precisão explícita, % mostra seis casas decimais.
Formate números inteiros e partes de datas
d é usado para números inteiros. f"{42:d}" funciona, mas f"{3.0:d}" gera ValueError porque um número de ponto flutuante não é um inteiro. Um zero antes da largura adiciona preenchimento com zeros; um sinal de mais solicita um sinal visível:
print(f"{7:03d}") # 007
print(f"{5:+d}") # +5
print(f"{-5:+d}") # -5
Para o mês 7, o dia 4 e o ano 2026, f"{month:02d}/{day:02d}/{year}" constrói "07/04/2026". Para a hora 9 e o minuto 5, f"{hour}:{minute:02d}" constrói "9:05". O preenchimento com zero impede que um minuto de um dígito apareça como "9:5".
Combine instruções em ordem
A ordem é preenchimento, alinhamento, sinal, zero, largura, agrupamento, precisão e tipo. Você pode omitir partes desnecessárias. f"{12345.678:>12,.2f}" usa alinhamento à direita, largura 12, agrupamento com vírgula e duas casas decimais, resultando em " 12,345.68".
A precisão pode vir de outra variável: com places = 3, f"{3.14159:.{places}f}" resulta em "3.142". Os mesmos especificadores funcionam em format(value, spec) e em campos de str.format(). Mantenha o número original para cálculos; round(value, 2) retorna um número arredondado quando é isso que o cálculo exige.
Principais conclusões
- Dois-pontos introduzem instruções de exibição; o valor armazenado não muda.
- A precisão de ponto fixo define as casas decimais, e o arredondamento segue o valor armazenado.
- Uma vírgula agrupa milhares;
%multiplica uma fração por 100. dexige um número inteiro; o preenchimento com zeros mantém legíveis as partes de datas e horários.- Mantenha números para os cálculos e formate-os no momento da exibição.
5.3 Alinhe a saída em colunas
Uma largura de campo reserva um número mínimo de posições de caracteres para um valor. Combinar larguras torna pequenas tabelas e recibos legíveis em um terminal.
Escolha largura e alinhamento
Por padrão, strings são alinhadas à esquerda e números à direita. f"{'cat':6}" resulta em "cat ", enquanto f"{42:6}" resulta em " 42". Use um caractere de alinhamento para escolher explicitamente:
| Caractere | Significado | Exemplo |
|---|---|---|
< | Esquerda | f"{'hi':<6}" resulta em "hi " |
> | Direita | f"{'hi':>6}" resulta em " hi" |
^ | Centro | f"{'hi':^6}" resulta em " hi " |
Quando a centralização deixa um número ímpar de espaços, o alinhamento da f-string coloca o espaço extra à direita: f"{'hi':^7}" resulta em " hi ".
A largura é um mínimo. f"{'elephant':4}" ainda resulta em "elephant"; ela não corta a palavra. Uma entrada longa pode, portanto, deslocar as colunas seguintes.
Adicione um caractere de preenchimento ou limite o texto
Um caractere de preenchimento fica imediatamente antes do alinhamento. f"{'hi':*^10}" resulta em "****hi****", e f"{7:0>3}" resulta em "007". O preenchimento precisa de um caractere de alinhamento. f"{'':-^20}" preenche um campo vazio com vinte traços.
A precisão de string limita o número de caracteres exibidos:
place = "Washington"
print(f"{place:.4}") # Wash
print(f"|{place:10.4}|") # |Wash |
A precisão primeiro limita o texto exibido a quatro caracteres; depois, a largura o preenche até dez. Use largura e precisão correspondentes quando o texto precisar permanecer dentro de uma coluna fixa. O place original ainda é "Washington".
Crie uma linha de recibo
item = "Apples"
qty = 3
price = 4.50
row = f"{item:<8}{qty:>4}{qty * price:>9.2f}"
print(row)
O resultado é "Apples 3 13.50". O campo do item tem seis letras e dois espaços. O campo da quantidade adiciona três espaços antes de 3. O campo do custo adiciona quatro espaços antes de 13.50, que tem cinco caracteres. Juntos, os campos ocupam 21 caracteres.
Reutilize essas larguras para pão (1 a 2,25) e café (2 a 11,00). Suas linhas são "Bread 1 2.25" e "Coffee 2 22.00". Uma linha de total pode combinar os dois primeiros campos:
print(f"{'Total':<12}{37.75:>9.2f}")
# "Total 37.75"
O campo de custo começa na mesma posição e tem a mesma precisão decimal, portanto os valores ficam alinhados.
Adapte o formato à exibição
Escolha larguras que deixem espaço para as entradas mais longas e para o espaçamento, ou encurte o texto deliberadamente. Uma variável pode fornecer uma largura: com w = 10, f"{name:<{w}}" preenche name até dez caracteres.
Colunas baseadas em caracteres precisam de uma fonte monoespaçada, como a usada em um terminal. Para preenchimento simples fora de uma f-string, ljust() e rjust() se comportam como < e >. center() e ^ centralizam o texto, mas podem dividir um preenchimento ímpar de modo diferente: "hi".center(7) resulta em " hi ", enquanto f"{'hi':^7}" resulta em " hi ".
Principais conclusões
- A largura define um mínimo; o alinhamento determina onde fica o preenchimento.
- O preenchimento precede o alinhamento, e a precisão de string limita os caracteres exibidos.
- Use as mesmas larguras de campo e a mesma precisão decimal em cada linha.
- Escolha uma exibição monoespaçada para colunas baseadas em caracteres.
center()e a centralização de f-strings podem distribuir de modo diferente um preenchimento ímpar.
Exercícios resolvidos de Strings em Python
1Analise um código caractere por caractere
14 passos
- 1IntroduçãoLeia uma etiqueta de armazenamento
Uma etiqueta de armazenamento contém letras, um hífen e dígitos:
"Box-482". Isso é uma string, e cada caractere tem um índice. Um programa pode precisar da primeira letra, do último dígito ou de toda a parte numérica (uma fatia).Você vai criar a etiqueta, representar suas posições e selecionar suas partes. Acompanhe os caracteres exatos em cada etapa; um espaço ou separador afeta as posições assim como uma letra.
- 2ExplicaçãoDistinga a sintaxe do texto armazenado
Uma string é uma sequência ordenada de caracteres. As aspas externas informam ao Python onde um literal começa e termina; elas não fazem parte de seu valor.
label = "Box-482" print(len(label)) # 7O hífen é um dos sete caracteres. Aspas simples poderiam marcar o mesmo valor. Você também pode armazenar texto vazio com
"", que tem comprimento zero. - 3ExemploCrie a etiqueta a partir de trechos
Comece com a palavra e um código numérico:
kind = "Box" number = 482 label = kind + "-" + str(number)str(number)produz"482", depois as duas concatenações criam"Box-482". O hífen aparece porque é um trecho fornecido. Omitirstr()tentaria concatenar uma string e um número inteiro, o que geraTypeError. - 4DesafioConte o valor com uma sequência de escape
Um aviso curto é armazenado como
notice = "A\nB!". Qual é seu comprimento e quantas linhasprint(notice)exibe?---reveal---
O comprimento é
4:A, uma nova linha,Be!. A impressão exibe duas linhas, comAna primeira eB!na segunda. A sequência de escape é processada quando o literal é lido; a impressão revela a nova linha que já está em seu valor. - 5AnalogiaAtribua um número a cada posição
Pense na etiqueta como sete espaços numerados em uma linha. A numeração começa em zero:
Character: B o x - 4 8 2 Index: 0 1 2 3 4 5 6label[0]resulta em"B", elabel[4]resulta em"4". O resultado é uma string de um caractere, mesmo quando parece um número. A posição7seria o oitavo espaço, que não existe nessa etiqueta. - 6ExplicaçãoConte de trás para a frente a partir do último caractere
Índices negativos usam o fim como ponto de referência. Para
"Box-482",label[-1]é"2"elabel[-3]é"4".O equivalente não negativo de
-3élen(label) - 3, ou4. Ambos selecionam o mesmo caractere. Não há uma posição de zero negativo no fim:-0é simplesmente0, portanto ainda seleciona o primeiro caractere. - 7DesafioSelecione um caractere sem executar código
Para
code = "Tin-739", qual é o valor decode[-2]?code[len(code)]selecionaria o último caractere?---reveal---
code[-2]é"3", o caractere imediatamente antes do9final.code[len(code)]geraIndexError: comprimento sete significa índices de zero a seis. A expressão para o último caractere écode[len(code) - 1], oucode[-1]. - 8DicaProteja a leitura de um caractere
Uma entrada vazia não tem caractere no índice zero. Coloque a verificação de comprimento antes da leitura do caractere:
if len(label) > 0 and label[0] == "B": print("Begins with B")Quando o primeiro teste é falso,
andignora o segundo. Essa ordem faz diferença: colocarlabel[0]primeiro já causaria uma falha em uma entrada vazia antes que o Python chegasse à verificação de comprimento. - 9ExplicaçãoSelecione toda a parte numérica
Uma fatia inclui seu início e exclui seu limite de parada:
label = "Box-482" number_text = label[4:7] print(number_text) # 482As posições
4,5e6fornecem os dígitos. O limite de parada7é o limite após o último caractere. Como a seleção vai até o fim,label[4:]fornece o mesmo resultado. Nenhuma conversão ocorre; a fatia ainda é texto. - 10ExemploFaça as duas fatias se encontrarem
O trecho à esquerda termina no limite em que a parte numérica começa:
left = label[:4] # "Box-" right = label[4:] # "482" print(left + right) # Box-482O limite comum
4faz os trechos se encontrarem sem lacuna nem sobreposição. Por isso,s[:k] + s[k:]reconstrói uma string. Usarlabel[:3]deixaria o hífen de fora do resultado reconstruído. - 11Ideia-chaveUm limite de fatia pode ultrapassar o fim
Compare
label[99]comlabel[4:99]. O índice individual geraIndexError, mas a fatia resulta em"482".Uma fatia ajusta um limite além da string ao fim disponível. Portanto,
label[99:]resulta em texto vazio. Isso é útil para selecionar até certa quantidade de texto, mas também significa que uma fatia incorreta pode retornar menos caracteres do que você esperava sem avisar. - 12ExemploInverta apenas os dígitos selecionados
Primeiro extraia os dígitos, depois inverta essa nova string:
digits = label[4:] backward = digits[::-1] print(backward) # 284Um passo negativo percorre a string de trás para a frente. Com os dois limites omitidos, a fatia visita todos os caracteres do último ao primeiro. Um passo positivo de dois pularia posições alternadas. Um passo zero é inválido e gera
ValueError. - 13DesafioCrie uma etiqueta alterada
Para
label = "Jar-916", qual é o resultado delabel[:4] + label[4:][::-1]? Explique qual trecho mantém sua ordem.---reveal---
O resultado é
"Jar-619". A primeira fatia mantém"Jar-"inalterada. A segunda primeiro seleciona"916", depois[::-1]inverte apenas esses dígitos para"619". A concatenação une os dois resultados sem adicionar outro separador. - 14RecapitulaçãoDistinga posições de limites
Use um índice para um caractere e uma fatia para um trecho. As posições começam em zero; índices negativos contam a partir do fim. Uma fatia exclui seu limite de parada, e seu passo controla a direção e o espaçamento.
Primeiro acompanhe os caracteres armazenados, depois avalie cada seleção antes de combinar os resultados.
2Crie um código com caracteres ocultos usando um laço
12 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoMantenha os dígitos e oculte as letras
- 2ExplicaçãoPrepare os resultados acumulados
- 3ExemploTome uma decisão para cada caractere
- 4ExemploAcompanhe as passagens restantes
- 5DesafioRastreie uma entrada diferente
- 6ConexãoAdicione posições somente quando necessário
- 7DicaDeixe espaço para um próximo caractere
- 8Ideia-chaveA string antiga não foi editada
- 9ExemploMantenha outro nome para o valor antigo
- 10ExemploSubstitua um caractere em uma posição usando fatias
- 11DesafioRastreie o valor e sua cópia armazenada
- 12RecapitulaçãoAcompanhe cada variável ao longo do laço
3Leia e valide uma mensagem com marcadores
16 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoProcesse uma solicitação curta
- 2ExemploRemova os caracteres em branco das extremidades
- 3ExplicaçãoChame e encadeie métodos
- 4DesafioEscolha uma operação para uma terminação exata
- 5ConexãoCompare textos normalizando maiúsculas e minúsculas
- 6ExplicaçãoPergunte se está presente, onde ou quantas vezes
- 7ExemploLocalize o início do nome
- 8ExemploEncontre o fim depois do início
- 9DicaNão trate uma posição como indicação de presença
- 10DesafioExtraia um campo entre marcadores
- 11ExemploExtraia o texto da quantidade de assentos
- 12ExplicaçãoTeste antes de converter
- 13DesafioAplique a mesma regra de entrada
- 14Ideia-chaveUma comparação de textos não compara quantidades
- 15DesafioTrate um campo limpo e uma busca sem resultado
- 16RecapitulaçãoUse cada resultado para sua finalidade
4Transforme um registro em campos e texto legível
12 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoLeia um registro simples
- 2ExplicaçãoDivida em um separador exato
- 3ExemploVerifique os campos antes de lê-los
- 4ExemploCalcule usando os valores convertidos
- 5DesafioPreserve um valor ausente
- 6Ideia-chaveA divisão por caracteres em branco escolhe trechos diferentes
- 7DicaPare após a divisão necessária
- 8ExemploUna trechos de exibição com um separador
- 9DesafioPreveja uma junção com trechos vazios
- 10ConexãoEscolha entre limpeza e reconstrução exata
- 11DesafioCorrija a exibição de um registro
- 12RecapitulaçãoAcompanhe os tipos ao longo do registro
5Formate um pequeno recibo
16 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoDê a um cálculo um formato legível
- 2ExemploInsira o custo do item
- 3DesafioObserve quando a expressão é executada
- 4DicaMantenha a sintaxe dos campos visível
- 5ExplicaçãoEscolha duas casas decimais
- 6Ideia-chaveArredonde o valor realmente armazenado
- 7ExemploExiba uma taxa como porcentagem
- 8DesafioCombine agrupamento e decimais
- 9ConexãoPreencha partes de datas e horários
- 10ExplicaçãoReserve os campos do recibo
- 11ExemploConte os espaços em uma linha
- 12DicaA largura não encurta um item longo
- 13DesafioLeia um campo preenchido e centralizado
- 14DesafioCrie uma segunda linha de recibo
- 15ConexãoAdapte a fonte ao formato
- 16RecapitulaçãoMantenha cálculo e apresentação separados
Questões de Strings em Python
Conjunto 1: Limpe, busque e valide textos10 Questões de Prática
Questão 1 de 10
" Go Home ".strip().lower() retorna?Mostrar respostaOcultar resposta
strip() remove os espaços externos enquanto mantém o espaço entre as palavras. lower() então altera as letras, resultando em "go home". O resultado "gohome" exigiria também a remoção dos espaços internos, mas a remoção atua apenas nas extremidades da string.Questão 2 de 10
"test.txt".rstrip(".txt") retorna?Mostrar respostaOcultar resposta
t e x. A remoção consome o sufixo e depois o t final de "test", parando em s, portanto o resultado é "tes". Remover exatamente a terminação ".txt" exigiria removesuffix().Questão 3 de 10
"A-a-a".replace("a", "x", 1).lower()?Mostrar respostaOcultar resposta
a minúsculo e deixa o A maiúsculo inicial inalterado. Converter o resultado para minúsculas produz "a-x-a". Converter primeiro para minúsculas mudaria a ocorrência substituída, produzindo um resultado diferente.Questão 4 de 10
"cocoa".rfind("co")?Mostrar respostaOcultar resposta
"co" começa nos índices 0 e 2, e rfind() retorna o último índice inicial, 2. Ele continua contando posições a partir da esquerda da string inteira. Retornar 3 identificaria o último caractere dessa correspondência em vez de seu início.Questão 5 de 10
O que é impresso?
s = "label"
p = s.find(":")
print(s[p:])
Mostrar respostaOcultar resposta
find() retorna -1. Usado como início de fatia, esse valor seleciona o último caractere, "l", que é impresso sem aspas. Uma busca sem correspondência não gera ValueError com find(); esse seria o comportamento de index().Questão 6 de 10
Qual texto é extraído?
s = "Item [K9] ready [Q2]"
a = s.find("[")
b = s.find("]", a)
result = s[a + 1:b]
Mostrar respostaOcultar resposta
a e parar antes de b mantém apenas "K9". Usar o último colchete de fechamento incluiria o texto intermediário e o segundo colchete de abertura.Questão 7 de 10
"abababa".count("aba")?Mostrar respostaOcultar resposta
0–2, e a próxima correspondência sem sobreposição usa 4–6, resultando em duas. Há também uma correspondência possível em 2–4, mas ela se sobrepõe a uma correspondência contada. count() não conta todas as posições iniciais possíveis quando as subcadeias correspondentes compartilham caracteres.Questão 8 de 10
s = raw.strip() e depois s.isdecimal() and int(s) > 0. A entrada original " 08 " passa no teste e qual número inteiro ela representa?Mostrar respostaOcultar resposta
"08", cujos caracteres são dígitos decimais, e int("08") é o número inteiro positivo 8. Os espaços ao redor não participam mais do teste. O zero inicial não faz a conversão falhar, e a chamada de int() produz um número em vez de manter uma string.Questão 9 de 10
a = " Cedar " e b = "cedar", qual par resulta de a == b e a.strip().casefold() == b.strip().casefold()?Mostrar respostaOcultar resposta
"cedar", portanto a segunda comparação é verdadeira. A igualdade não ignora diferenças de apresentação, a menos que o programa as remova explicitamente.Questão 10 de 10
"24" < "7" e int("24") < int("7")?Mostrar respostaOcultar resposta
"2" vem antes de "7". Após a conversão, as quantidades são 24 e 7, portanto a comparação numérica é falsa. A comparação de textos é decidida no primeiro caractere diferente; ela não converte strings de dígitos automaticamente.Conjunto 2: Leia literais, índices e fatias10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
len("x\ty!")?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
"Tag: " + str(8 * 2) produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
r"D:\temp" armazena após os dois-pontos?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
code = "R7K2", qual é o valor de code[-2]?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
word = "orbit", o que word[len(word) // 2] retorna?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
O que acontece quando este código é executado com line = ""?
if len(line) > 0 and line[0] == ";":
print("Skip")
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
"notebook"[2:5]?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
"map"[1:50]?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
"0123456789"[1:8:3] retorna?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
s = "red-blue", qual é o resultado de s[-4:][::-1] + s[:3]?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 3: Rastreie laços e novos valores de string10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
for ch in "a b!": é executado?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
O que é impresso?
total = 0
for ch in "Route 68":
if ch.isdecimal():
total += int(ch)
print(total)
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
O que é impresso?
for ch in "Cab 53A":
if ch.isdigit():
print(ch)
break
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
O que é impresso?
for i, ch in enumerate("lamp"):
if i % 2 == 1:
print(ch, end="")
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Qual valor é impresso?
s = "aaabb"
pairs = 0
for i in range(len(s) - 1):
if s[i] == s[i + 1]:
pairs += 1
print(pairs)
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Qual texto é impresso?
s = "north"
i = len(s) - 1
result = ""
while i >= 0:
result += s[i]
i -= 2
print(result)
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
O que b contém após este código?
a = "pine"
b = a
a = a.upper()
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
s = "stone", o que s[:2] + "X" + s[3:] produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Qual par de valores é impresso?
word = "muse"
result = ""
for ch in word:
if ch in "aeiou":
result = ch.upper() + result
else:
result = ch + result
print(word, result)
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
O que este código imprime?
s = " west "
s.strip()
s = s + "!"
print(len(s))
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 4: Divida registros e reconstrua textos10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
len(" one\ttwo three ".split())?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
"A||C|".split("|") retorna?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
"red;blue".split("; ")?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
O que é impresso?
parts = "Mina;4;6".split(";")
total = int(parts[1]) + int(parts[2])
print(f"{parts[0]}:{total}")
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
"mode=fast=quiet".split("=", 1)[1]?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
"status".partition(":") retorna?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
" / ".join("ab") produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
"-".join("x::z:".split(":"))?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
result = " ".join(" bright\n blue sky ".split())?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
": ".join(map(str, [6, 11])) produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 5: Crie valores e colunas legíveis10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
name = "Luca", o que f"Hi, {name.upper()}!" produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Qual texto é impresso?
n = 4
label = f"{{n}}={n + 2}"
n = 9
print(label)
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
f"{4826.5:,.2f}"?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
f"{0.0375:.1%}"?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
n = 0.125, qual par resulta de f"{n:.2f}" e n == 0.125?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
month = 11, day = 6, year = 2028, hour = 7 e minute = 3, o que f"{month:02d}/{day:02d}/{year} {hour}:{minute:02d}" produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
f"|{'owl':>5}|" produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
name = "seahorse", quais são o conteúdo e o comprimento de f"{name:6.4}"?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
item = "Tea", qty = 2 e price = 3.75, qual é o resultado de f"{item:<5}{qty:>2}{qty * price:>7.2f}"?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
f"{'otter':3}" produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Travou em uma questão sua? Ajuda com Tarefas
Termos-Chave
A
Acumulador
"" pode reunir apenas caracteres que não são espaços para criar "abc" a partir de "a b c".Agrupamento de milhares
f"{7654321:,}" exibe "7,654,321", separando cada grupo de três dígitos.Alinhamento
< o coloca à esquerda, > à direita e ^ o centraliza.f"{'hi':>5}" coloca três espaços antes da palavra; o alinhamento à esquerda os coloca depois.Aproximação binária
2.675 é ligeiramente menor, portanto formatá-lo com duas casas decimais resulta em "2.67".Arredondamento para o par
0.125 e 0.375 serem exibidos como "0.12" e "0.38" com duas casas.Atribuição a item
word[1] = "x" gera TypeError para uma string, mesmo quando o índice um é uma posição válida.Avaliação de curto-circuito
s.isdecimal() and int(s) > 0 ignora a conversão quando o teste de caracteres falha.C
Campo de expressão
f"Total: {3 * 4}" calcula doze antes de inserir o resultado após a descrição.Campo vazio
"a;;c" em ";" mantém um campo vazio na segunda posição, preservando um valor ausente do registro.Caractere de preenchimento
f"{'ok':*^6}" resulta em "**ok**", preenchendo as posições não usadas ao redor do texto.Caracteres em branco
" \t" contém apenas caracteres em branco, e removê-los das extremidades elimina os dois caracteres, deixando texto vazio.Chave literal
f"{{open}}" exibe { ao redor de open sem pedir ao Python que avalie esse nome.Comparação que distingue maiúsculas de minúsculas
"Ready" == "ready" ser falsa até que ambos os valores tenham letras com caixa consistente.Concatenação
"rain" + "coat" resulta em "raincoat"; adicionar um espaço exige um trecho que contenha esse espaço.Contador
"Bay 27" aumenta em 2 e 7, terminando com duas correspondências após o laço.Conversão com map()
map() aplica uma função a cada item de entrada, permitindo que str forneça os trechos de string exigidos por join().map() em ", ".join(map(str, [3, 8])) fornece strings antes de uni-las como "3, 8".Conversão de campo
int() antes de somá-la."12" em um número inteiro antes que ele possa ser somado numericamente a cinco.Conversão de ponto de código
ord() para obter o número Unicode de um caractere e chr() para obter o caractere correspondente a esse número.ord("A") resulta em 65, e a conversão inversa com chr(65) resulta em "A".Correspondências sem sobreposição
count()."aaaa".count("aa") usam posições de caracteres diferentes, portanto a contagem é dois.E
Encadeamento de métodos
" OK ".strip().lower() primeiro retorna "OK" e depois converte esse resultado em "ok".enumerate()
enumerate() fornece cada item de uma sequência junto com seu índice, permitindo que um laço use ambos sem uma consulta separada.enumerate("sun") recebe pares de índice e caractere que começam com 0, "s" e terminam com 2, "n".Erro de uma unidade
text[len(text)] lê além do fim; subtrair um fornece o índice do último caractere.Especificador de formato
f"{8.5:.2f}", o especificador de formato .2f seleciona duas casas decimais, produzindo "8.50" para exibição.F
Fatia
"window"[1:4] retorna "ind", selecionando as posições de um a três e excluindo a posição quatro.find()
find() retorna o índice inicial da primeira subcadeia correspondente, ou -1 se o texto procurado não ocorrer."lemon".find("mo") retorna dois, enquanto "lemon".find("xy") retorna menos um por não haver correspondência.Fonte monoespaçada
Formato de ponto fixo
f para exibir um número com uma quantidade escolhida de casas decimais, arredondando e adicionando zeros à direita conforme necessário..3f mostra o número inteiro cinco como "5.000", com exatamente três casas decimais.Formato de porcentagem
% para multiplicar uma fração por 100 na exibição e acrescentar um sinal de porcentagem, com precisão decimal opcional..0% mostra 0.18 como "18%"; fornecer dezoito multiplicaria o valor uma segunda vez.Í
Índice
label = "desk", o índice 2 seleciona "s", pois as posições começam com d em zero.Índice negativo
-1 é o último e -len(text) é o primeiro."cloud", o índice negativo -1 seleciona "d", enquanto -2 seleciona o caractere anterior "u".I
Imutabilidade
name[0] = "B" falhar, enquanto name = "B" + name[1:] cria um novo texto com sucesso.IndexError
"cup"[3] gera IndexError, pois seus três caracteres ocupam as posições de zero a dois.Instrução break
break encerra imediatamente o laço atual, permitindo que uma busca de caracteres pare após processar o primeiro caractere correspondente."Zone 81" pode imprimir 8 e executar break, deixando o 1 posterior sem processamento.J
Junção
["home", "nora"] com o separador "/" produz "home/nora", com uma barra entre os trechos.L
Largura do campo
"cat", mas a largura dois ainda preserva a palavra inteira.Limite da fatia
"garden"[:3], o limite de fatia três é a parada excluída, portanto d fica de fora e o resultado é "gar".Lista
"oak,elm" em uma vírgula, a lista contém dois itens e o índice um seleciona a string "elm".Literal de string
"open" e 'open' usam aspas externas diferentes, mas armazenam os mesmos quatro caracteres.Literal de string bruta
r que mantém barras invertidas como caracteres literais em vez de processar sequências de escape comuns.r"C:\new" mantém a barra invertida antes de new, impedindo que esse par se torne uma nova linha.M
Método de string
"hello".upper() retorna "HELLO"; omitir os parênteses não chama o método.N
Normalização de caracteres em branco
" ".join(text.split()) limpa as extremidades e substitui sequências internas de caracteres em branco por um único espaço comum." ".join(text.split()) transforma " blue\n sky " em "blue sky", com espaçamento consistente.Normalização de maiúsculas e minúsculas
"Straße" quanto "STRASSE" em "strasse", permitindo que as grafias sejam consideradas iguais.Número máximo de divisões
split() ou rsplit() faz, deixando o restante junto em uma parte não dividida."a=b=c" em "a" e "b=c" pela esquerda, mantendo os sinais de igual posteriores.O
Ordem lexicográfica
"19" antes de "3", pois os primeiros caracteres diferentes decidem a comparação.P
Palíndromo
"radar" passa em word == word[::-1]; um texto com maiúsculas e minúsculas precisa ser normalizado quando essa diferença deve ser ignorada.Partição
"color=blue" em "=" é ("color", "=", "blue"), mantendo o separador no meio.Passo da fatia
"abcdef"[::2] seleciona os índices zero, dois e quatro, produzindo "ace".Percurso de string
for direto ou um laço while que usa um índice."go!" visita g, depois o e depois !, permitindo uma decisão separada para cada caractere.Ponto de código Unicode
len() os conta."👍🏽" contém dois pontos de código Unicode, portanto o comprimento de sua string Python é dois, apesar da aparência.Posição inicial da busca
"cocoa".find("co", 1) ignora a correspondência em zero e encontra a que está em dois.Precisão de string
f"{'sunshine':6.3}" exibe "sun" e três espaços sem alterar a palavra original.Preenchimento
"5".zfill(3) produz "005", enquanto "1234", que já é mais longo, permanece inalterado para largura três.Preenchimento com zeros
f"{4:02d}" exibe "04", permitindo que um minuto de um dígito ocupe um campo de dois dígitos.R
Reatribuição
a contém "red", a reatribuição com a += "!" faz a se referir a "red!", enquanto outra variável ainda pode conter "red".Remoção de caracteres das extremidades
"..hello!!" com o conjunto ".!" mantém "hello", deixando o texto interno intacto.removeprefix()
removeprefix() remove um início que corresponda exatamente ao prefixo de uma string, retornando o texto original quando esse início está ausente."pretest".removeprefix("pre") resulta em "test", enquanto um prefixo ausente deixa o texto inalterado.removesuffix()
removesuffix() remove uma terminação que corresponda exatamente ao sufixo de uma string, preservando outros caracteres que a remoção por conjunto poderia eliminar."report.txt".removesuffix(".txt") mantém "report", incluindo o t final do nome-base.rfind()
rfind() retorna o índice inicial da última subcadeia correspondente, usando as posições da string inteira mesmo ao buscar pela direita."a-b-c".rfind("-") retorna três, localizando o último hífen com uma posição contada a partir da esquerda.S
Separador
", " corresponde a uma vírgula seguida de um espaço, portanto não divide a string "oak,elm".Separador vazio
join() para unir trechos sem caracteres extras entre eles."".join(["a", "b", "c"]) resulta em "abc", preservando a ordem dos trechos.Sequência de escape
"up\ndown", a sequência de escape \n armazena uma nova linha, portanto a impressão coloca as palavras em duas linhas.str.format()
str.format() preenche campos entre chaves em uma string usando seus argumentos, com campos selecionados pela ordem ou por um índice de argumento explícito."{1}, {0}".format("Ada", "Lovelace") usa str.format() para colocar o segundo argumento antes do primeiro.String
str, usada para armazenar textos como nomes, mensagens e códigos."Hello, Nora" armazena a saudação, a vírgula e o espaço como parte de um único valor de texto ordenado.String formatada
f que avalia expressões dentro de campos entre chaves e insere seus valores no texto resultante.count = 7, a string formatada f"Found {count}" cria "Found 7" sem uma conversão explícita de número em texto.Subcadeia de caracteres
"light" é uma subcadeia de "daylight", mas "dyl" não é, pois essas letras não são consecutivas.T
Teste de caracteres
isalpha() também rejeitam strings vazias."lake9".isalnum() é verdadeiro, enquanto o espaço em "lake 9" faz essa versão falhar.Teste de dígitos decimais
isdecimal(), aceita strings não vazias compostas de caracteres de dígitos decimais e rejeita sinais, pontos decimais e espaços."007", que é convertido no número inteiro sete.Teste de pertencimento
in ou not in para verificar se uma subcadeia ocorre, retornando um valor booleano sem fornecer sua posição."ice" in "spice" é verdadeiro, enquanto "Ice", com maiúscula, não corresponde ao mesmo texto.V
Valor de retorno
text.upper() é texto em maiúsculas; atribuí-lo a text o guarda para uso posterior.Sobre esta aula
Crie seus próprios Materiais de Estudo
Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.