Pular para conteúdo

Lista 11 · Texto

Esta é a primeira lista no Google Colab. Se ainda não leu Google Colab, leia antes de começar — em especial a parte sobre a ordem de execução das células.

O assunto é o mesmo do capítulo: índice, fatia, len, upper/lower/ strip, split, in e f-string. Nenhum exercício aqui precisa de def — só input() e print(), como sempre.

A armadilha da unidade aparece de propósito no Exercício 02: um método de texto que roda, não dá erro, e não muda nada se você esquecer de guardar o resultado.

Abrir no Colab

Baixar o caderno

Como esta lista funciona

Abra o caderno no Colab e salve uma cópia no seu Drive antes de começar (Arquivo → Salvar uma cópia no Drive). Sem isso, você perde o que escrever.

Nos exercícios que mostram como deve ficar, escreva a solução no lugar do # TODO e rode a célula. Compare a saída com a sessão publicada aqui, linha por linha — espaço a mais, acento faltando e letra maiúscula contam.

O código de cada exercício também está aqui embaixo, caso você prefira colar num editor local.

Parte A · no papel

Faça esta parte antes de ligar o computador

Escreva a resposta no caderno, depois rode para conferir. Prever e errar ensina; rodar primeiro e ler a saída, não.

No papel, antes do computador.

A1. Rastreie o índice e a fatia. Complete o que cada linha imprime.

codigo = "TELECOM25"
print(codigo[0])
print(codigo[3:7])
print(len(codigo))
Linha O que imprime
print(codigo[0])
print(codigo[3:7])
print(len(codigo))

A2. O que imprime?

cidade = "Joao Pessoa"
print(cidade.upper())
print(cidade.lower())

A3. A armadilha do strip. O que este programa imprime?

plano = "  Fibra 300  "
plano.strip()
print(plano)

O espaço some? Por que sim, ou por que não?

A4. O que acontece? Este programa não termina de rodar — por quê? Qual é a mensagem de erro, e em qual linha ela aparece?

plano = "Fibra300"
plano[0] = "G"
print(plano)

Compare com a A3: os dois tentam "mudar" o texto. Um deles avisa que não deu certo, o outro não. Qual é qual, e por que a diferença importa?

A5. O que imprime?

frase = "cliente pediu cancelamento"
partes = frase.split(" ")
print(partes)
print(partes[1])

A6. O que imprime?

mensagem = "Aguardando pagamento da fatura"
print("fatura" in mensagem)
print("Fatura" in mensagem)

As duas linhas imprimem o mesmo valor? Por quê?

A7. Soletrando. Este programa percorre o texto letra a letra. Complete a tabela — uma linha por letra — e diga o total impresso no fim.

palavra = "Aurora"
vogais = 0
for letra in palavra:
    if letra in "aeiou":
        vogais = vogais + 1
print(vogais)
Volta letra letra in "aeiou" vogais depois
1
2
3
4
5
6

Depois responda: quantas vogais a palavra tem de verdade? O programa concorda? Se não, qual linha teria de mudar — e por que ele não deu erro nenhum ao responder errado?

A8. Qual ferramenta para cada caso. Diga qual você usaria, e por quê, em uma frase:

Preciso… [ ] fatia, split, in, for letra, strip/lower
saber se a frase menciona "fatura"
separar um nome completo em partes
pegar os quatro primeiros caracteres de um código
contar quantas letras a a frase tem
tirar o espaço que o usuário digitou sem querer

Parte B · no computador

Exercício 01

O sistema de atendimento gera protocolos com um padrão fixo: os dois primeiros caracteres são a sigla do setor, e os quatro seguintes são o ano. Peça ao usuário o protocolo e mostre o setor, o ano e o tamanho total do código — usando índice e fatia, sem contar caractere por caractere.

Use exatamente estes textos, para a sua sessão bater com a publicada:

Protocolo:
Setor: ...
Ano: ...
Tamanho: ...

Teste também estes, à mão, trocando o protocolo digitado:

Protocolo digitado Setor Ano Tamanho
RJ20230012 RJ 2023 10
MG20220099 MG 2022 10
BA20250101 BA 2025 10

Como deve ficar. Rodando o programa e digitando SP20240007, a tela tem de ficar assim:

Protocolo: SP20240007
Setor: SP
Ano: 2024
Tamanho: 10
# Exercicio 01 -- indice e fatia num codigo de protocolo.
# TODO: peca o protocolo com input() (variavel "protocolo").
# TODO: pegue os dois primeiros caracteres do protocolo (o setor), com fatia.
# TODO: pegue os quatro caracteres seguintes (o ano), com fatia.
# TODO: mostre o setor, o ano e o tamanho total do protocolo (len).

Exercício 02

O sistema de cadastro recebe o e-mail do cliente digitado à mão — às vezes com espaço sobrando no início ou no fim, às vezes com letra maiúscula misturada. Peça o e-mail e mostre a versão padronizada: sem espaço nas pontas e toda em minúsculas.

Use exatamente estes textos, para a sua sessão bater com a publicada:

Email do cliente:
Email padronizado: ...

A armadilha desta lista

email.strip() sozinho, numa linha, não muda email — ele calcula o texto limpo e joga fora. O mesmo vale para .lower(). Para guardar o resultado, é email = email.strip(). Sem o email = na frente, nada muda, e o programa não avisa nada disso.

Teste também estes, à mão, trocando o e-mail digitado (inclusive os espaços):

Email digitado Email padronizado
Carlos@Empresa.com carlos@empresa.com
MARIA.SILVA@DOMINIO.NET maria.silva@dominio.net
joao@ifpb.edu.br joao@ifpb.edu.br

Como deve ficar. Rodando o programa e digitando Ana.Souza@Provedor.COM, a tela tem de ficar assim:

Email do cliente:   Ana.Souza@Provedor.COM  
Email padronizado: ana.souza@provedor.com
# Exercicio 02 -- a armadilha: metodo de texto sem guardar o resultado.
# TODO: peca o email do cliente com input() (variavel "email").
# TODO: tire os espacos das pontas com .strip() -- GUARDE o resultado de
#       volta em "email" (email = email.strip()).
# TODO: deixe tudo minusculo com .lower() -- GUARDE o resultado de volta
#       em "email" tambem.
# TODO: mostre o email padronizado.

Exercício 03

O relatório de consumo do mês chega numa linha só, com os valores de cada dia separados por ponto e vírgula, assim: 4.2;1.8;5.0;0.9;3.3. Peça essa linha, quebre-a com split(";") e mostre quantos valores vieram, qual foi o primeiro dia e qual foi o último.

Repare que split(";") recebe o separador entre parênteses. Sem ele, o split quebraria nos espaços — e esta linha não tem nenhum.

O que sai do split é uma lista de textos, não de números: partes[0] vale "4.2", com aspas. Para esta questão isso não atrapalha, porque você só vai mostrar os valores, não somá-los.

Use exatamente estes textos, para a sua sessão bater com a publicada:

Linha do relatorio:
Dias no relatorio: ...
Primeiro dia: ...
Ultimo dia: ...

Teste também estes, à mão, trocando a linha digitada:

Linha digitada Dias Primeiro Último
4.2;1.8;5.0;0.9;3.3 5 4.2 3.3
7.5 1 7.5 7.5
1;2 2 1 2

A segunda linha é a que surpreende: um valor sem nenhum ponto e vírgula ainda assim vira uma lista — de um item só. O split nunca devolve o texto sozinho; ele sempre devolve lista.

Como deve ficar. Rodando o programa e digitando 4.2;1.8;5.0;0.9;3.3, a tela tem de ficar assim:

Linha do relatorio: 4.2;1.8;5.0;0.9;3.3
Dias no relatorio: 5
Primeiro dia: 4.2
Ultimo dia: 3.3
# Exercicio 03 -- split com separador explicito.
# TODO: peca a linha do relatorio com input() (variavel "linha").
# TODO: quebre a linha com split(";") e guarde numa lista chamada partes.
# TODO: pegue o primeiro item (indice 0) e o ultimo (len(partes) - 1).
# TODO: mostre quantos dias vieram, o primeiro e o ultimo.

Exercício 04

Um filtro simples marca como suspeita qualquer mensagem que contenha a palavra "gratis". Peça uma mensagem e mostre se ela contém essa palavra — usando in, sem laço nenhum.

Use exatamente estes textos, para a sua sessão bater com a publicada:

Mensagem:
Suspeita: ...

Teste também estes, à mão, trocando a mensagem digitada:

Mensagem digitada Suspeita
Sua fatura vence amanha False
Baixe o aplicativo gratis agora True
GRATIS por tempo limitado False

A última linha é de propósito: in diferencia maiúscula de minúscula, e "gratis" não é igual a "GRATIS".

Como deve ficar. Rodando o programa e digitando Ganhe premios gratis agora mesmo, a tela tem de ficar assim:

Mensagem: Ganhe premios gratis agora mesmo
Suspeita: True
# Exercicio 04 -- "in" para testar se um pedaco aparece no texto.
# TODO: peca a mensagem com input() (variavel "mensagem").
# TODO: descubra se "gratis" aparece em mensagem, com o operador "in"
#       (variavel "suspeita").
# TODO: mostre o resultado.

Exercício 05

Um formulário pede uma frase de identificação do cliente, e o sistema quer saber quantas vogais ela tem. Peça a frase e conte, percorrendo-a letra a letra com for letra in frase, quantas vogais aparecem. Mostre também o tamanho total da frase.

É o padrão "contar sob condição" da Unidade 4, aplicado a texto: contador em zero antes do laço, if letra in "aeiou" dentro, + 1 quando der certo.

Cuidado com as maiúsculas. "A" não está em "aeiou" — é outro caractere. Antes de percorrer, passe a frase para minúsculo e guarde o resultado: frase = frase.lower(). Sem o frase =, o método devolve o texto novo e ele se perde, e o seu programa conta a menos sem reclamar de nada.

Use exatamente estes textos, para a sua sessão bater com a publicada:

Frase de identificacao:
Tamanho da frase: ...
Vogais encontradas: ...

Teste também estes, à mão, trocando a frase digitada:

Frase digitada Tamanho Vogais
Ana Oliveira 12 7
xyz 3 0
AEIOU 5 5
(frase vazia) 0 0

A terceira linha é a que pega o .lower() esquecido: só maiúsculas, e a resposta certa é 5. Quem esqueceu conta 0 — e o programa não avisa.

Como deve ficar. Rodando o programa e digitando Ana Oliveira, a tela tem de ficar assim:

Frase de identificacao: Ana Oliveira
Tamanho da frase: 12
Vogais encontradas: 7
# Exercicio 05 -- percorrer o texto letra a letra e contar sob condicao.
# TODO: peca a frase com input() (variavel "frase").
# TODO: mostre o tamanho da frase com len().
# TODO: passe a frase para minusculo GUARDANDO o resultado: frase = frase.lower()
# TODO: contador de vogais em 0, antes do laco.
# TODO: for letra in frase, com um if que testa se a letra esta em "aeiou".
# TODO: depois do laco, mostre quantas vogais foram encontradas.

Exercício 06

Uma empresa gera o login de cada funcionário assim: a primeira letra do primeiro nome + o último sobrenome, tudo minúsculo, sem espaço. Peça o nome completo (primeiro nome e sobrenome, separados por um espaço) e mostre o login gerado.

Use exatamente estes textos, para a sua sessão bater com a publicada:

Nome completo do funcionario:
Login gerado: ...

Este exercício junta tudo o que a lista trabalhou: split para separar o nome, índice para pegar a primeira letra e o sobrenome, .lower() para minúsculas e f-string para montar o resultado.

Teste também estes, à mão, trocando o nome digitado:

Nome completo digitado Login gerado
Maria Oliveira moliveira
Joao Pedro Santos jsantos
Ana Souza asouza

Como deve ficar. Rodando o programa e digitando Carlos Silva, a tela tem de ficar assim:

Nome completo do funcionario: Carlos Silva
Login gerado: csilva
# Exercicio 06 -- juntando split, indice, lower e f-string.
# TODO: peca o nome completo com input() (variavel "nome_completo").
# TODO: quebre em partes com .split(" ").
# TODO: pegue o primeiro nome (partes[0]) e o sobrenome (o ultimo item
#       da lista, indice len(partes) - 1).
# TODO: pegue a primeira letra do primeiro nome (indice 0) e deixe ela
#       minuscula com .lower().
# TODO: monte o login: a letra minuscula + o sobrenome minusculo -- sem
#       espaco entre os dois.
# TODO: mostre o login gerado.