Trabalhando com strings em Python

Aprenda a trabalhar com texto em Python. Acesse qualquer caractere ou trecho de uma string com índices e fatias, percorra textos para contar, buscar e criar novas strings e veja por que uma string nunca pode ser alterada no próprio objeto. Use métodos de string para alterar maiúsculas e minúsculas, limpar entradas, buscar, testar, dividir e unir textos. Termine formatando a saída com f-strings: números arredondados, separadores de milhares, porcentagens, datas e horários no formato dos EUA e colunas bem alinhadas.

BásicoAula 5 de 10 do curso Curso de Introdução à programação com Python

O que você vai aprender

  1. 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 strings
      Crie strings com aspas, sequências de escape e aspas triplas, descubra seu comprimento com len() e combine-as com + e *.
    • Selecione caracteres individuais pelo índice
      Use í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 fatias
      Extraia subcadeias de caracteres com [start:stop] e [start:stop:step], use posições omitidas e negativas e preveja exatamente quais caracteres uma fatia inclui.
  2. 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 string
      Visite cada caractere com laços for e while, 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 existentes
      Explique o que significa dizer que strings são imutáveis e produza texto alterado por meio de fatias, concatenação e reatribuição.
  3. 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étodos
      Chame 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 string
      Verifique 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 strings
      Verifique 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.
  4. Divida uma linha de texto em palavras ou campos com split() e combine os trechos novamente em uma string com join().
    • Divida uma string em uma lista de partes
      Use 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 separador
      Combine várias strings em uma só com join(), escolha o separador, converta primeiro os itens que não são strings e combine split() com join() para reorganizar textos.
  5. 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-strings
      Escreva 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 leitura
      Adicione 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 colunas
      Defina larguras de campo, alinhamento e caracteres de preenchimento, encurte textos longos e combine essas opções para imprimir tabelas e recibos alinhados.

Guia de estudo de Strings em Python

5 capítulos

1

Crie 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:

CaracterePython
A partir do início012345
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 IndexError para 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
FatiaSignificadoResultado 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.
2

Processe 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 for direto 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 while precisa de um limite seguro e de uma atualização da posição.
  • break interrompe 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:

TarefaExpressão
Substituir o caractere em itext[:i] + new + text[i + 1:]
Inserir antes do caractere em itext[: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.
3

Transforme, 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étodoResultado 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 exigem removeprefix() ou removesuffix().
  • 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
FerramentaResultadoQuando não há correspondência
sub in textPresença como True ou FalseFalse
text.find(sub)Primeiro índice inicial-1
text.rfind(sub)Último índice inicial-1
text.index(sub)Primeiro índice inicialGera ValueError
text.count(sub)Número de correspondências sem sobreposição0

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 in para presença, um método de busca para posição e count() para frequência.
  • find() e rfind() retornam -1 quando o texto está ausente; index() gera ValueError.
  • 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.

TesteVerdadeiro 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 que isdigit() para entradas destinadas a int().
  • 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.
4

Divida 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ãoResultado
"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.
  • maxsplit limita as divisões, e rsplit() 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ãoResultado
"".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.
5

Formate 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:

EstiloExemploResultado
F-stringf"{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 f e 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
EspecificadorResultado 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.
  • d exige 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:

CaractereSignificadoExemplo
<Esquerdaf"{'hi':<6}" resulta em "hi "
>Direitaf"{'hi':>6}" resulta em " hi"
^Centrof"{'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

5 Lições Interativas

1

Analise um código caractere por caractere

14 passos
Crie uma etiqueta, leia posições e extraia ou inverta trechos selecionados.
  1. 1
    Introduçã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.

  2. 2
    Explicaçã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))  # 7
    

    O 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.

  3. 3
    ExemploCrie 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. Omitir str() tentaria concatenar uma string e um número inteiro, o que gera TypeError.

  4. 4
    DesafioConte o valor com uma sequência de escape

    Um aviso curto é armazenado como notice = "A\nB!". Qual é seu comprimento e quantas linhas print(notice) exibe?

    ---reveal---

    O comprimento é 4: A, uma nova linha, B e !. A impressão exibe duas linhas, com A na primeira e B! 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.

  5. 5
    AnalogiaAtribua 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 6
    

    label[0] resulta em "B", e label[4] resulta em "4". O resultado é uma string de um caractere, mesmo quando parece um número. A posição 7 seria o oitavo espaço, que não existe nessa etiqueta.

  6. 6
    Explicaçã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" e label[-3] é "4".

    O equivalente não negativo de -3 é len(label) - 3, ou 4. Ambos selecionam o mesmo caractere. Não há uma posição de zero negativo no fim: -0 é simplesmente 0, portanto ainda seleciona o primeiro caractere.

  7. 7
    DesafioSelecione um caractere sem executar código

    Para code = "Tin-739", qual é o valor de code[-2]? code[len(code)] selecionaria o último caractere?

    ---reveal---

    code[-2] é "3", o caractere imediatamente antes do 9 final. code[len(code)] gera IndexError: comprimento sete significa índices de zero a seis. A expressão para o último caractere é code[len(code) - 1], ou code[-1].

  8. 8
    DicaProteja 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, and ignora o segundo. Essa ordem faz diferença: colocar label[0] primeiro já causaria uma falha em uma entrada vazia antes que o Python chegasse à verificação de comprimento.

  9. 9
    Explicaçã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)  # 482
    

    As posições 4, 5 e 6 fornecem os dígitos. O limite de parada 7 é 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.

  10. 10
    ExemploFaç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-482
    

    O limite comum 4 faz os trechos se encontrarem sem lacuna nem sobreposição. Por isso, s[:k] + s[k:] reconstrói uma string. Usar label[:3] deixaria o hífen de fora do resultado reconstruído.

  11. 11
    Ideia-chaveUm limite de fatia pode ultrapassar o fim

    Compare label[99] com label[4:99]. O índice individual gera IndexError, 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.

  12. 12
    ExemploInverta apenas os dígitos selecionados

    Primeiro extraia os dígitos, depois inverta essa nova string:

    digits = label[4:]
    backward = digits[::-1]
    print(backward)  # 284
    

    Um 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.

  13. 13
    DesafioCrie uma etiqueta alterada

    Para label = "Jar-916", qual é o resultado de label[: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.

  14. 14
    Recapitulaçã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.

2

Crie um código com caracteres ocultos usando um laço

12 passos
Rastreie contadores e a acumulação de strings e explique por que o texto original permanece inalterado.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoMantenha os dígitos e oculte as letras
  2. 2
    ExplicaçãoPrepare os resultados acumulados
  3. 3
    ExemploTome uma decisão para cada caractere
  4. 4
    ExemploAcompanhe as passagens restantes
  5. 5
    DesafioRastreie uma entrada diferente
  6. 6
    ConexãoAdicione posições somente quando necessário
  7. 7
    DicaDeixe espaço para um próximo caractere
  8. 8
    Ideia-chaveA string antiga não foi editada
  9. 9
    ExemploMantenha outro nome para o valor antigo
  10. 10
    ExemploSubstitua um caractere em uma posição usando fatias
  11. 11
    DesafioRastreie o valor e sua cópia armazenada
  12. 12
    RecapitulaçãoAcompanhe cada variável ao longo do laço
3

Leia e valide uma mensagem com marcadores

16 passos
Limpe o texto do usuário, localize marcadores e aplique testes de entrada antes da conversão numérica.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoProcesse uma solicitação curta
  2. 2
    ExemploRemova os caracteres em branco das extremidades
  3. 3
    ExplicaçãoChame e encadeie métodos
  4. 4
    DesafioEscolha uma operação para uma terminação exata
  5. 5
    ConexãoCompare textos normalizando maiúsculas e minúsculas
  6. 6
    ExplicaçãoPergunte se está presente, onde ou quantas vezes
  7. 7
    ExemploLocalize o início do nome
  8. 8
    ExemploEncontre o fim depois do início
  9. 9
    DicaNão trate uma posição como indicação de presença
  10. 10
    DesafioExtraia um campo entre marcadores
  11. 11
    ExemploExtraia o texto da quantidade de assentos
  12. 12
    ExplicaçãoTeste antes de converter
  13. 13
    DesafioAplique a mesma regra de entrada
  14. 14
    Ideia-chaveUma comparação de textos não compara quantidades
  15. 15
    DesafioTrate um campo limpo e uma busca sem resultado
  16. 16
    RecapitulaçãoUse cada resultado para sua finalidade
4

Transforme um registro em campos e texto legível

12 passos
Divida um registro pequeno, converta suas quantidades e una trechos usando regras de separação escolhidas com cuidado.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoLeia um registro simples
  2. 2
    ExplicaçãoDivida em um separador exato
  3. 3
    ExemploVerifique os campos antes de lê-los
  4. 4
    ExemploCalcule usando os valores convertidos
  5. 5
    DesafioPreserve um valor ausente
  6. 6
    Ideia-chaveA divisão por caracteres em branco escolhe trechos diferentes
  7. 7
    DicaPare após a divisão necessária
  8. 8
    ExemploUna trechos de exibição com um separador
  9. 9
    DesafioPreveja uma junção com trechos vazios
  10. 10
    ConexãoEscolha entre limpeza e reconstrução exata
  11. 11
    DesafioCorrija a exibição de um registro
  12. 12
    RecapitulaçãoAcompanhe os tipos ao longo do registro
5

Formate um pequeno recibo

16 passos
Crie f-strings, escolha formatos numéricos e alinhe uma linha de recibo sem alterar os dados originais.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDê a um cálculo um formato legível
  2. 2
    ExemploInsira o custo do item
  3. 3
    DesafioObserve quando a expressão é executada
  4. 4
    DicaMantenha a sintaxe dos campos visível
  5. 5
    ExplicaçãoEscolha duas casas decimais
  6. 6
    Ideia-chaveArredonde o valor realmente armazenado
  7. 7
    ExemploExiba uma taxa como porcentagem
  8. 8
    DesafioCombine agrupamento e decimais
  9. 9
    ConexãoPreencha partes de datas e horários
  10. 10
    ExplicaçãoReserve os campos do recibo
  11. 11
    ExemploConte os espaços em uma linha
  12. 12
    DicaA largura não encurta um item longo
  13. 13
    DesafioLeia um campo preenchido e centralizado
  14. 14
    DesafioCrie uma segunda linha de recibo
  15. 15
    ConexãoAdapte a fonte ao formato
  16. 16
    RecapitulaçãoMantenha cálculo e apresentação separados

Questões de Strings em Python

50 Questões de Prática em 5 conjuntos

Conjunto 1: Limpe, busque e valide textos10 Questões de Prática

Questão 1 de 10

O que " Go Home ".strip().lower() retorna?
  1. "gohome" (sem espaços)
  2. " go home " (espaços externos mantidos)
  3. "Go Home" (maiúsculas e minúsculas originais)
  4. "go home" (um espaço interno)
Mostrar respostaOcultar resposta
Resposta: D
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

O que "test.txt".rstrip(".txt") retorna?
  1. "test"
  2. "test."
  3. "tes"
  4. "test.tx"
Mostrar respostaOcultar resposta
Resposta: C
O argumento lista os caracteres que podem ser removidos: ponto, 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

Qual é o resultado de "A-a-a".replace("a", "x", 1).lower()?
  1. "a-x-a" (primeira correspondência minúscula alterada)
  2. "a-x-x" (ambas as correspondências minúsculas alteradas)
  3. "x-a-a" (letra inicial alterada)
  4. "A-x-a" (maiúscula inicial mantida)
Mostrar respostaOcultar resposta
Resposta: A
A substituição distingue maiúsculas de minúsculas e é limitada a uma correspondência, portanto altera o primeiro 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

Qual é o resultado de "cocoa".rfind("co")?
  1. 0
  2. 2
  3. 3
  4. 4
Mostrar respostaOcultar resposta
Resposta: B
A subcadeia "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:])
  1. l
  2. label
  3. Uma linha vazia
  4. Gera ValueError.
Mostrar respostaOcultar resposta
Resposta: A
Os dois-pontos estão ausentes, portanto 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]
  1. "[K9"
  2. "Q2"
  3. "K9"
  4. "K9] ready [Q2"
Mostrar respostaOcultar resposta
Resposta: C
A primeira busca localiza o primeiro colchete de abertura, e a segunda encontra o primeiro colchete de fechamento a partir dessa posição. Começar a fatia um caractere depois de 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

Qual é o resultado de "abababa".count("aba")?
  1. 3
  2. 1
  3. 0
  4. 2
Mostrar respostaOcultar resposta
Resposta: D
Uma correspondência usa os índices 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

Um formulário usa 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?
  1. Falha por causa dos espaços externos.
  2. Passa e representa 8.
  3. Passa e mantém o texto "08".
  4. Falha por causa do zero inicial.
Mostrar respostaOcultar resposta
Resposta: B
A remoção dos espaços resulta em "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

Para a = " Cedar " e b = "cedar", qual par resulta de a == b e a.strip().casefold() == b.strip().casefold()?
  1. True, True
  2. False, False
  3. False, True
  4. True, False
Mostrar respostaOcultar resposta
Resposta: C
Os valores originais diferem tanto nos espaços externos quanto nas maiúsculas e minúsculas, portanto a igualdade direta é falsa. Limpar as duas extremidades e normalizar maiúsculas e minúsculas faz ambos os valores se tornarem "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

Qual par resulta de "24" < "7" e int("24") < int("7")?
  1. False, False
  2. True, False
  3. False, True
  4. True, True
Mostrar respostaOcultar resposta
Resposta: B
A comparação de strings é verdadeira porque o primeiro caractere "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

Qual é o valor de len("x\ty!")?
  1. 5
  2. 4
  3. 6
  4. 3
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Qual texto "Tag: " + str(8 * 2) produz?
  1. "Tag: 82"
  2. "Tag: 8 * 2"
  3. "Tag: 16.0"
  4. "Tag: 16"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O que r"D:\temp" armazena após os dois-pontos?
  1. Uma barra invertida seguida de temp.
  2. Uma tabulação seguida de emp.
  3. Duas barras invertidas seguidas de temp.
  4. Uma nova linha seguida de temp.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Com code = "R7K2", qual é o valor de code[-2]?
  1. "7"
  2. "2"
  3. "K"
  4. "R"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Com word = "orbit", o que word[len(word) // 2] retorna?
  1. "r"
  2. "i"
  3. Gera TypeError.
  4. "b"
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")
  1. Gera IndexError antes de testar o comprimento.
  2. Não imprime nada e não gera erro.
  3. Imprime "Skip" uma vez e para.
  4. Gera TypeError na condição.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Qual é o resultado de "notebook"[2:5]?
  1. "teb"
  2. "tebo"
  3. "ote"
  4. "te"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Qual é o resultado de "map"[1:50]?
  1. "a"
  2. ""
  3. "ap"
  4. Gera IndexError.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

O que "0123456789"[1:8:3] retorna?
  1. "148"
  2. "147"
  3. "1357"
  4. "1478"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Com s = "red-blue", qual é o resultado de s[-4:][::-1] + s[:3]?
  1. "derblue"
  2. "eulb-red"
  3. "eulbred"
  4. "blueeulb"
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

Quantas vezes o corpo de for ch in "a b!": é executado?
  1. 2
  2. 3
  3. 4
  4. 5
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)
  1. 14
  2. 2
  3. 68
  4. 8
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
  1. 3
  2. 53
  3. 5 e depois 3 em linhas separadas
  4. 5
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="")
  1. lm
  2. ap
  3. am
  4. lp
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)
  1. 2
  2. 3
  3. 4
  4. 1
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)
  1. hrn
  2. htr
  3. nrt
  4. hon
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()
  1. "PINE" (tudo em maiúsculas)
  2. "Pine" (apenas a inicial maiúscula)
  3. "" (texto vazio)
  4. "pine" (o texto original)
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Com s = "stone", o que s[:2] + "X" + s[3:] produz?
  1. "stXone"
  2. "sXone"
  3. "stXne"
  4. "stXo"
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)
  1. muse mUsE (palavra inalterada, resultado com maiúsculas na ordem original)
  2. mUsE EsUm (palavra com maiúsculas, resultado invertido com maiúsculas)
  3. muse Esum (palavra inalterada, uma maiúscula no resultado)
  4. muse EsUm (palavra inalterada, resultado invertido com maiúsculas)
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))
  1. 5
  2. 6
  3. 9
  4. 8
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

Qual é o resultado de len(" one\ttwo three ".split())?
  1. 4
  2. 3
  3. 5
  4. 6
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

O que "A||C|".split("|") retorna?
  1. ["A", "", "C", ""]
  2. ["A", "C"]
  3. ["A", "", "C"]
  4. ["A", "|C|"]
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Qual é o resultado de "red;blue".split("; ")?
  1. ["red", "blue"]
  2. ["red", " blue"]
  3. ["red;blue"]
  4. ["red;", "blue"]
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}")
  1. Mina:46
  2. Mina:4
  3. Mina:6
  4. Mina:10
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Qual é o resultado de "mode=fast=quiet".split("=", 1)[1]?
  1. "fast"
  2. "quiet"
  3. "fast=quiet"
  4. "mode=fast"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

O que "status".partition(":") retorna?
  1. ("", ":", "status")
  2. ("status", ":", "")
  3. ("status", "", "")
  4. ("", "", "status")
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

O que " / ".join("ab") produz?
  1. "a / b"
  2. "ab"
  3. "a / b / "
  4. " / a / b"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Qual é o resultado de "-".join("x::z:".split(":"))?
  1. "x-z"
  2. "x--z-"
  3. "x-z-"
  4. "x--z"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Qual texto é armazenado em result = " ".join(" bright\n blue sky ".split())?
  1. " bright blue sky "
  2. "brightblue sky"
  3. "bright blue sky"
  4. "bright blue sky"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

O que ": ".join(map(str, [6, 11])) produz?
  1. "6: 11"
  2. "6:11"
  3. "6: 11: "
  4. Gera TypeError.
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

Com name = "Luca", o que f"Hi, {name.upper()}!" produz?
  1. "Hi, Luca!" (nome com maiúsculas e minúsculas originais)
  2. "Hi, {name.upper()}!" (campo não avaliado)
  3. "Hi, LUCA!" (nome em maiúsculas)
  4. "HI, LUCA!" (mensagem inteira em maiúsculas)
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)
  1. {n}=11
  2. {n}=6
  3. 4=6
  4. 9=11
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Qual é o resultado de f"{4826.5:,.2f}"?
  1. "4826.50"
  2. "4.826,50"
  3. "4,826.5"
  4. "4,826.50"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Qual é o resultado de f"{0.0375:.1%}"?
  1. "0.0%"
  2. "3.8%"
  3. "3.7%"
  4. "37.5%"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Com n = 0.125, qual par resulta de f"{n:.2f}" e n == 0.125?
  1. "0.12", True
  2. "0.13", True
  3. "0.12", False
  4. "0.13", False
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Com month = 11, day = 6, year = 2028, hour = 7 e minute = 3, o que f"{month:02d}/{day:02d}/{year} {hour}:{minute:02d}" produz?
  1. "11/06/2028 7:03"
  2. "06/11/2028 7:03"
  3. "11/6/2028 7:3"
  4. "11/06/2028 07:03"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

O que f"|{'owl':>5}|" produz?
  1. "|owl |"
  2. "| owl |"
  3. "| owl|"
  4. "| owl|"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Com name = "seahorse", quais são o conteúdo e o comprimento de f"{name:6.4}"?
  1. "seahorse", comprimento 8
  2. "seah", comprimento 4
  3. "seah ", comprimento 6
  4. " seah", comprimento 6
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Para item = "Tea", qty = 2 e price = 3.75, qual é o resultado de f"{item:<5}{qty:>2}{qty * price:>7.2f}"?
  1. "Tea 2 3.75"
  2. "Tea 2 7.50"
  3. "Tea 2 7.50"
  4. "Tea 2 7.500"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

O que f"{'otter':3}" produz?
  1. "ott"
  2. "ter"
  3. "otter"
  4. Gera ValueError.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

69 Termos-Chave, cada um com sua definição

A

Acumulador
Um acumulador é uma variável que constrói um resultado acumulado ao longo das passagens de um laço, como um total numérico ou uma string recém-criada.
Um acumulador de string que começa com "" pode reunir apenas caracteres que não são espaços para criar "abc" a partir de "a b c".
Agrupamento de milhares
O agrupamento de milhares separa números grandes em grupos legíveis usando uma vírgula ou um sublinhado em um especificador de formato.
O agrupamento de milhares em f"{7654321:,}" exibe "7,654,321", separando cada grupo de três dígitos.
Alinhamento
O alinhamento determina onde um valor fica dentro de um campo preenchido: < o coloca à esquerda, > à direita e ^ o centraliza.
O alinhamento à direita em f"{'hi':>5}" coloca três espaços antes da palavra; o alinhamento à esquerda os coloca depois.
Aproximação binária
Uma aproximação binária é um valor de ponto flutuante armazenado próximo de uma quantidade decimal, que pode afetar o arredondamento em um limite de exibição.
A aproximação binária do número de ponto flutuante 2.675 é ligeiramente menor, portanto formatá-lo com duas casas decimais resulta em "2.67".
Arredondamento para o par
O arredondamento para o par escolhe o dígito mantido par quando um valor armazenado está exatamente na metade entre dois resultados arredondados possíveis.
O arredondamento para o par faz os empates exatos 0.125 e 0.375 serem exibidos como "0.12" e "0.38" com duas casas.
Atribuição a item
Uma atribuição a item tenta substituir um item de uma sequência em um índice; strings a rejeitam porque seus caracteres não podem ser editados no próprio objeto.
A atribuição a item em word[1] = "x" gera TypeError para uma string, mesmo quando o índice um é uma posição válida.
Avaliação de curto-circuito
A avaliação de curto-circuito ignora um operando booleano quando o resultado anterior já determina a condição, permitindo que um primeiro teste proteja uma operação posterior.
A avaliação de curto-circuito em s.isdecimal() and int(s) > 0 ignora a conversão quando o teste de caracteres falha.

C

Campo de expressão
Um campo de expressão é uma parte de uma f-string delimitada por chaves cuja expressão é avaliada quando a string é criada.
O campo de expressão em f"Total: {3 * 4}" calcula doze antes de inserir o resultado após a descrição.
Campo vazio
Um campo vazio é um item de zero caracteres mantido quando separadores explícitos são adjacentes ou ocorrem no início ou no fim de uma string.
Dividir "a;;c" em ";" mantém um campo vazio na segunda posição, preservando um valor ausente do registro.
Caractere de preenchimento
Um caractere de preenchimento substitui os espaços comuns de preenchimento quando colocado diretamente antes de um símbolo de alinhamento em um especificador de formato.
Um asterisco como caractere de preenchimento em f"{'ok':*^6}" resulta em "**ok**", preenchendo as posições não usadas ao redor do texto.
Caracteres em branco
Caracteres em branco são caracteres de espaçamento, como espaços, tabulações e quebras de linha, que métodos de texto podem remover das extremidades ou usar como limites.
A string " \t" contém apenas caracteres em branco, e removê-los das extremidades elimina os dois caracteres, deixando texto vazio.
Chave literal
Uma chave literal é um caractere de chave exibido como texto em uma f-string por meio de sua duplicação, mantendo-o separado da sintaxe de campos de expressão.
Uma chave literal em f"{{open}}" exibe { ao redor de open sem pedir ao Python que avalie esse nome.
Comparação que distingue maiúsculas de minúsculas
Uma comparação que distingue maiúsculas de minúsculas trata caracteres maiúsculos e minúsculos como diferentes, de modo que palavras correspondentes ainda podem falhar no teste de igualdade.
Uma comparação que distingue maiúsculas de minúsculas faz "Ready" == "ready" ser falsa até que ambos os valores tenham letras com caixa consistente.
Concatenação
A concatenação combina strings em sequência em uma única string, mantendo todos os seus caracteres sem inserir um separador automaticamente.
A concatenação com "rain" + "coat" resulta em "raincoat"; adicionar um espaço exige um trecho que contenha esse espaço.
Contador
Um contador é uma variável que registra quantas vezes uma condição é satisfeita, geralmente começando em zero e aumentando em um a cada correspondência.
Um contador de dígitos para "Bay 27" aumenta em 2 e 7, terminando com duas correspondências após o laço.
Conversão com map()
Uma conversão com map() aplica uma função a cada item de entrada, permitindo que str forneça os trechos de string exigidos por join().
Uma conversão com map() em ", ".join(map(str, [3, 8])) fornece strings antes de uni-las como "3, 8".
Conversão de campo
A conversão de campo transforma uma parte de texto no tipo necessário para o trabalho posterior, como converter uma quantidade separada com int() antes de somá-la.
A conversão de campo transforma o texto separado "12" em um número inteiro antes que ele possa ser somado numericamente a cinco.
Conversão de ponto de código
A conversão de ponto de código usa ord() para obter o número Unicode de um caractere e chr() para obter o caractere correspondente a esse número.
A conversão de ponto de código com ord("A") resulta em 65, e a conversão inversa com chr(65) resulta em "A".
Correspondências sem sobreposição
Correspondências sem sobreposição são ocorrências que não reutilizam nenhuma posição de caractere, regra de correspondência usada por count().
As duas correspondências sem sobreposição em "aaaa".count("aa") usam posições de caracteres diferentes, portanto a contagem é dois.

E

Encadeamento de métodos
O encadeamento de métodos chama um método sobre o resultado de uma chamada anterior, de modo que cada operação recebe o valor retornado imediatamente antes dela.
O encadeamento de métodos em " OK ".strip().lower() primeiro retorna "OK" e depois converte esse resultado em "ok".
enumerate()
A função enumerate() fornece cada item de uma sequência junto com seu índice, permitindo que um laço use ambos sem uma consulta separada.
Um laço sobre enumerate("sun") recebe pares de índice e caractere que começam com 0, "s" e terminam com 2, "n".
Erro de uma unidade
Um erro de uma unidade usa um limite uma posição antes ou depois do correto, frequentemente por confundir o comprimento de uma sequência com seu último índice.
Um erro de uma unidade em text[len(text)] lê além do fim; subtrair um fornece o índice do último caractere.
Especificador de formato
Um especificador de formato é um conjunto de instruções de exibição após os dois-pontos em um campo, controlando detalhes como precisão, agrupamento ou largura.
Em f"{8.5:.2f}", o especificador de formato .2f seleciona duas casas decimais, produzindo "8.50" para exibição.

F

Fatia
Uma fatia seleciona caracteres usando um início, um limite de parada excluído e um passo opcional, retornando o texto selecionado como uma string.
A fatia "window"[1:4] retorna "ind", selecionando as posições de um a três e excluindo a posição quatro.
find()
O método find() retorna o índice inicial da primeira subcadeia correspondente, ou -1 se o texto procurado não ocorrer.
A busca "lemon".find("mo") retorna dois, enquanto "lemon".find("xy") retorna menos um por não haver correspondência.
Fonte monoespaçada
Uma fonte monoespaçada dá a cada posição de caractere a mesma largura visual, permitindo que campos repetidos de largura fixa se alinhem como colunas de texto.
Uma fonte monoespaçada em um terminal faz campos de custo de mesma largura se alinharem porque cada posição de caractere ocupa o mesmo espaço.
Formato de ponto fixo
O formato de ponto fixo usa o tipo f para exibir um número com uma quantidade escolhida de casas decimais, arredondando e adicionando zeros à direita conforme necessário.
O formato de ponto fixo .3f mostra o número inteiro cinco como "5.000", com exatamente três casas decimais.
Formato de porcentagem
O formato de porcentagem usa % para multiplicar uma fração por 100 na exibição e acrescentar um sinal de porcentagem, com precisão decimal opcional.
O formato de porcentagem .0% mostra 0.18 como "18%"; fornecer dezoito multiplicaria o valor uma segunda vez.

Í

Índice
Um índice é uma posição inteira usada para selecionar um caractere de uma string, com o primeiro caractere na posição zero.
Para label = "desk", o índice 2 seleciona "s", pois as posições começam com d em zero.
Índice negativo
Um índice negativo seleciona um caractere contando a partir do fim, onde -1 é o último e -len(text) é o primeiro.
Em "cloud", o índice negativo -1 seleciona "d", enquanto -2 seleciona o caractere anterior "u".

I

Imutabilidade
A imutabilidade significa que um valor não pode ser alterado no próprio objeto; uma operação de string deve produzir outro valor para dar a uma variável um texto diferente.
A imutabilidade de strings faz name[0] = "B" falhar, enquanto name = "B" + name[1:] cria um novo texto com sucesso.
IndexError
Um IndexError informa que um índice de sequência acessado não tem item, como ao selecionar uma posição além do fim de uma string.
A expressão "cup"[3] gera IndexError, pois seus três caracteres ocupam as posições de zero a dois.
Instrução break
A instrução break encerra imediatamente o laço atual, permitindo que uma busca de caracteres pare após processar o primeiro caractere correspondente.
Uma busca pelo primeiro dígito em "Zone 81" pode imprimir 8 e executar break, deixando o 1 posterior sem processamento.

J

Junção
A junção cria uma string a partir de trechos de string, colocando um separador escolhido entre trechos consecutivos sem adicioná-lo às extremidades.
A junção de ["home", "nora"] com o separador "/" produz "home/nora", com uma barra entre os trechos.

L

Largura do campo
Uma largura do campo define um número mínimo de posições de caracteres para um valor formatado, adicionando preenchimento e permitindo que valores mais longos permaneçam inteiros.
Uma largura de campo de cinco adiciona dois espaços após "cat", mas a largura dois ainda preserva a palavra inteira.
Limite da fatia
Um limite da fatia marca onde a seleção começa ou termina; uma fatia percorrida para a frente inclui sua posição inicial e exclui sua posição de parada.
Em "garden"[:3], o limite de fatia três é a parada excluída, portanto d fica de fora e o resultado é "gar".
Lista
Uma lista é uma coleção ordenada de itens escrita entre colchetes; a divisão de uma string retorna uma lista cujos itens são strings.
Após dividir "oak,elm" em uma vírgula, a lista contém dois itens e o índice um seleciona a string "elm".
Literal de string
Um literal de string é um texto escrito diretamente no código Python entre aspas correspondentes, que marcam seus limites sem fazer parte do valor.
Os literais de string "open" e 'open' usam aspas externas diferentes, mas armazenam os mesmos quatro caracteres.
Literal de string bruta
Um literal de string bruta tem um prefixo r que mantém barras invertidas como caracteres literais em vez de processar sequências de escape comuns.
O literal de string bruta 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
Um método de string é uma função associada a valores de string, chamada com um ponto e parênteses para executar uma operação de texto e retornar seu resultado.
A chamada do 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
A normalização de caracteres em branco com " ".join(text.split()) limpa as extremidades e substitui sequências internas de caracteres em branco por um único espaço comum.
A normalização de caracteres em branco com " ".join(text.split()) transforma " blue\n sky " em "blue sky", com espaçamento consistente.
Normalização de maiúsculas e minúsculas
A normalização de maiúsculas e minúsculas remove distinções de caixa para comparação, incluindo algumas alterações específicas de idiomas que a conversão comum para minúsculas não faz.
A normalização de maiúsculas e minúsculas transforma tanto "Straße" quanto "STRASSE" em "strasse", permitindo que as grafias sejam consideradas iguais.
Número máximo de divisões
O argumento número máximo de divisões limita quantos cortes split() ou rsplit() faz, deixando o restante junto em uma parte não dividida.
Definir o número máximo de divisões como um divide "a=b=c" em "a" e "b=c" pela esquerda, mantendo os sinais de igual posteriores.

O

Ordem lexicográfica
A ordem lexicográfica compara sequências da esquerda para a direita, usando o ponto de código do primeiro caractere diferente ou colocando um prefixo mais curto primeiro.
A ordem lexicográfica coloca "19" antes de "3", pois os primeiros caracteres diferentes decidem a comparação.

P

Palíndromo
Um palíndromo é um texto que se lê da mesma forma nos dois sentidos, portanto comparar uma string com sua inversa pode testar essa propriedade.
O 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
Uma partição divide o texto uma vez em uma tupla de três partes que contém o texto antes de um separador, o separador e o texto depois dele.
A partição de "color=blue" em "=" é ("color", "=", "blue"), mantendo o separador no meio.
Passo da fatia
Um passo da fatia é a distância inteira não nula entre posições selecionadas; um valor negativo faz a seleção avançar de trás para a frente.
Um passo de fatia de dois em "abcdef"[::2] seleciona os índices zero, dois e quatro, produzindo "ace".
Percurso de string
O percurso de string visita caracteres em uma ordem escolhida, normalmente com um laço for direto ou um laço while que usa um índice.
O percurso da string "go!" visita g, depois o e depois !, permitindo uma decisão separada para cada caractere.
Ponto de código Unicode
Um ponto de código Unicode é um número atribuído a um caractere; strings Python armazenam pontos de código, e len() os conta.
O emoji "👍🏽" 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
Uma posição inicial da busca define a primeira posição considerada por uma busca, mantendo os índices retornados relativos à string inteira.
Uma posição inicial de busca igual a um em "cocoa".find("co", 1) ignora a correspondência em zero e encontra a que está em dois.
Precisão de string
A precisão de string limita quantos caracteres de texto um campo exibe, permitindo combinar um comprimento máximo de texto com uma largura mínima.
A precisão de string em f"{'sunshine':6.3}" exibe "sun" e três espaços sem alterar a palavra original.
Preenchimento
O preenchimento adiciona caracteres para atingir uma largura mínima de campo, usando espaços, zeros ou um caractere escolhido e preservando valores mais longos.
O preenchimento com "5".zfill(3) produz "005", enquanto "1234", que já é mais longo, permanece inalterado para largura três.
Preenchimento com zeros
O preenchimento com zeros adiciona zeros à esquerda para atingir uma largura numérica mínima, tornando números inteiros curtos adequados para códigos e partes de datas ou horários.
O preenchimento com zeros em f"{4:02d}" exibe "04", permitindo que um minuto de um dígito ocupe um campo de dois dígitos.

R

Reatribuição
A reatribuição faz uma variável se referir a um valor diferente, sem alterar o valor ao qual ela se referia antes nem outros nomes para esse valor.
Quando 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
A remoção de caracteres das extremidades elimina caracteres indesejados dos extremos de uma string, usando caracteres em branco por padrão ou um conjunto especificado de caracteres removíveis.
A remoção de caracteres das extremidades de "..hello!!" com o conjunto ".!" mantém "hello", deixando o texto interno intacto.
removeprefix()
O método removeprefix() remove um início que corresponda exatamente ao prefixo de uma string, retornando o texto original quando esse início está ausente.
A chamada "pretest".removeprefix("pre") resulta em "test", enquanto um prefixo ausente deixa o texto inalterado.
removesuffix()
O método removesuffix() remove uma terminação que corresponda exatamente ao sufixo de uma string, preservando outros caracteres que a remoção por conjunto poderia eliminar.
A chamada "report.txt".removesuffix(".txt") mantém "report", incluindo o t final do nome-base.
rfind()
O método rfind() retorna o índice inicial da última subcadeia correspondente, usando as posições da string inteira mesmo ao buscar pela direita.
A busca "a-b-c".rfind("-") retorna três, localizando o último hífen com uma posição contada a partir da esquerda.

S

Separador
Um separador é a string exata que marca um limite de divisão ou é colocada entre trechos por uma junção, podendo conter vários caracteres.
O separador ", " corresponde a uma vírgula seguida de um espaço, portanto não divide a string "oak,elm".
Separador vazio
Um separador vazio é a string de zero caracteres usada com join() para unir trechos sem caracteres extras entre eles.
Usar um separador vazio em "".join(["a", "b", "c"]) resulta em "abc", preservando a ordem dos trechos.
Sequência de escape
Uma sequência de escape usa uma barra invertida e caracteres seguintes em um literal para representar um caractere, como uma nova linha, uma tabulação ou uma aspa.
Em "up\ndown", a sequência de escape \n armazena uma nova linha, portanto a impressão coloca as palavras em duas linhas.
str.format()
O método 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.
A chamada "{1}, {0}".format("Ada", "Lovelace") usa str.format() para colocar o segundo argumento antes do primeiro.
String
Uma string é uma sequência ordenada de caracteres Unicode do tipo str, usada para armazenar textos como nomes, mensagens e códigos.
A string "Hello, Nora" armazena a saudação, a vírgula e o espaço como parte de um único valor de texto ordenado.
String formatada
Uma string formatada é um literal de string marcado com f que avalia expressões dentro de campos entre chaves e insere seus valores no texto resultante.
Com 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
Uma subcadeia de caracteres é uma sequência consecutiva de caracteres dentro de outra string, que pode ser selecionada com uma fatia ou encontrada por uma busca.
O texto "light" é uma subcadeia de "daylight", mas "dyl" não é, pois essas letras não são consecutivas.

T

Teste de caracteres
Um teste de caracteres verifica se os caracteres de uma string atendem a uma regra e retorna um valor booleano; testes como isalpha() também rejeitam strings vazias.
O teste de caracteres "lake9".isalnum() é verdadeiro, enquanto o espaço em "lake 9" faz essa versão falhar.
Teste de dígitos decimais
Um 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.
Após a remoção dos espaços externos, o teste de dígitos decimais aceita "007", que é convertido no número inteiro sete.
Teste de pertencimento
Um teste de pertencimento usa in ou not in para verificar se uma subcadeia ocorre, retornando um valor booleano sem fornecer sua posição.
O teste de pertencimento "ice" in "spice" é verdadeiro, enquanto "Ice", com maiúscula, não corresponde ao mesmo texto.

V

Valor de retorno
Um valor de retorno é o resultado que uma função ou método devolve ao código chamador, podendo ser armazenado, testado ou passado a outra operação.
O valor de retorno de text.upper() é texto em maiúsculas; atribuí-lo a text o guarda para uso posterior.

Sobre esta aula

Por StudeliRelatar um erro

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.

Começar