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.
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.
| Linha | O que imprime |
|---|---|
print(codigo[0]) |
|
print(codigo[3:7]) |
|
print(len(codigo)) |
A2. O que imprime?
A3. A armadilha do strip. O que este programa imprime?
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?
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?
A6. O que imprime?
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:
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:
# 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:
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:
# 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:
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:
# 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:
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:
# 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:
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:
# 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:
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:
# 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.