Lista 10 · Padrões de lista¶
A Lista 09 foi sobre criar e percorrer uma lista. Esta é sobre o que fazer com ela: cinco formas cobrem quase todo processamento que você vai precisar este semestre — somar, contar, achar o extremo, filtrar e acumular numa lista nova.
A mais perigosa das cinco é achar o maior ou o menor valor. Começar o
candidato em 0 parece inofensivo e quase sempre passa despercebido — até a
lista ter só valores negativos, ou só positivos, e o 0 ganhar uma disputa
que nunca devia ter entrado. O jeito honesto é começar pelo primeiro valor
da própria lista.
A Parte A é no papel, como sempre. Rastreie antes de rodar.
Como esta lista funciona
Cada exercício abaixo é um arquivo só. Copie o código inteiro, cole no
OnlineGDB, escreva a sua solução no lugar do # TODO e
aperte ▶ Run.
Nos exercícios que mostram como deve ficar, compare a sua saída com a publicada aqui, linha por linha. Espaço a mais, acento faltando e letra maiúscula contam: o computador não relaxa em nenhum deles.
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 somar. Complete a tabela e diga o valor final de total.
| Volta | preco |
total no fim da volta |
|---|---|---|
| 1 | 12.0 | 12.0 |
| 2 | ||
| 3 | ||
| 4 |
A2. Rastreie o contar sob condição. Rastreie as duas variáveis.
consumos = [4.0, 1.5, 6.0, 2.0, 5.5]
total = 0
acima = 0
for consumo in consumos:
total = total + consumo
if consumo > 3.0:
acima = acima + 1
print(total, acima)
| Volta | consumo |
consumo > 3.0 |
total |
acima |
|---|---|---|---|---|
| 1 | 4.0 | True |
4.0 | 1 |
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 |
A3. O extremo que mente. O que este programa imprime?
O valor impresso está certo? Se não, qual é de fato o maior valor da lista, e por que o programa não achou ele?
A4. Rastreie o extremo corrigido. Mesma lista, só a primeira linha do candidato muda.
medicoes = [-4, -9, -2, -6]
maior = medicoes[0]
for v in medicoes:
if v > maior:
maior = v
print(maior)
| Volta | v |
v > maior? |
maior no fim da volta |
|---|---|---|---|
| início | — | — | -4 |
| 1 | -4 | ||
| 2 | |||
| 3 | |||
| 4 |
O valor final agora é o maior de verdade da lista?
A5. O que imprime? (filtrar).
notas = [4.0, 7.5, 9.0, 3.0, 6.5]
aprovadas = []
for nota in notas:
if nota >= 6.0:
aprovadas.append(nota)
print(aprovadas)
print(len(aprovadas))
Escreva as duas linhas que o programa imprime.
A6. O que imprime? (acumular em lista nova).
gastos = [10.0, 20.0, 5.0]
acumulado = []
total = 0
for gasto in gastos:
total = total + gasto
acumulado.append(total)
print(acumulado)
Escreva a lista que o programa imprime.
A7. Qual padrão usar? Para cada problema, diga qual dos cinco padrões resolve — somar, contar sob condição, achar o extremo, filtrar para lista nova ou acumular em lista nova:
- a partir de uma lista de consumos, descobrir o total do mês;
- a partir de uma lista de notas, descobrir quantas são menores que 5;
- a partir de uma lista de preços, descobrir o mais caro;
- a partir de uma lista de temperaturas, montar uma lista só com as negativas;
- a partir de uma lista de depósitos, montar uma lista com o saldo acumulado depois de cada um.
Parte B · no computador¶
Exercício 01¶
Escreva um programa que peça o consumo diário (em GB) de 5 dias soltos,
guarde cada um numa lista vazia com append e, depois — com um laço
separado, percorrendo a lista já pronta — some tudo e mostre o consumo
total do mês, com uma casa decimal.
Use exatamente estes textos, para a sua sessão bater com a publicada:
Como deve ficar. Rodando o programa e digitando 4.0, 2.0, 6.0, 1.0, 3.0,
a tela tem de ficar assim:
Consumo do dia em GB: 4.0
Consumo do dia em GB: 2.0
Consumo do dia em GB: 6.0
Consumo do dia em GB: 1.0
Consumo do dia em GB: 3.0
Consumo total do mes: 16.0 GB
# Exercicio 01 — padrao somar tudo, sobre uma lista pronta.
# TODO: crie uma lista vazia para os consumos.
# TODO: com um for que da 5 voltas, peca "Consumo do dia em GB: "
# (converta para float) e acrescente na lista com append.
# TODO: com um SEGUNDO for, agora percorrendo a lista pronta, some todos
# os consumos num acumulador que comeca em 0.
# TODO: mostre o consumo total do mes, com uma casa decimal.
Exercício 02¶
Escreva um programa que peça 6 notas de uma turma, guarde cada uma numa
lista vazia com append e, depois de todas lidas, conte quantas são maiores
ou iguais a 7.0 (aprovadas).
Use exatamente estes textos, para a sua sessão bater com a publicada:
Como deve ficar. Rodando o programa e digitando 8.0, 5.5, 7.0, 9.0, 6.0, 4.0,
a tela tem de ficar assim:
# Exercicio 02 — padrao contar sob condicao, sobre uma lista pronta.
# TODO: crie uma lista vazia para as notas.
# TODO: com um for que da 6 voltas, peca "Nota: " (converta para float)
# e acrescente na lista com append.
# TODO: com um SEGUNDO for, percorrendo a lista pronta, conte quantas
# notas sao >= 7.0, num contador que comeca em 0.
# TODO: mostre a quantidade de notas aprovadas.
Exercício 03¶
Escreva um programa que peça o consumo diário (em GB) de 4 dias soltos,
guarde cada um numa lista vazia com append e, depois, ache o menor
consumo do mês.
Este é o padrão do extremo: o candidato inicial tem de ser um valor que
existe de verdade na lista — o primeiro item, consumos[0] — nunca um número
inventado.
Use exatamente estes textos, para a sua sessão bater com a publicada:
A tentação de começar em 0
Consumo de dados nunca é negativo. Se você iniciar menor = 0, ele vence
toda vez — 0 é menor que qualquer consumo real —, e o programa
responde 0.0 GB para qualquer entrada, sem nunca dar erro para avisar
disso. Comece pelo primeiro item da própria lista.
Teste também estes, à mão, trocando os valores digitados:
| Consumos digitados | Menor consumo |
|---|---|
| 3.2, 5.0, 1.8, 4.4 | 1.8 GB |
| 2.0, 2.0, 2.0, 2.0 | 2.0 GB |
| 9.0, 1.0, 9.0, 9.0 | 1.0 GB |
Como deve ficar. Rodando o programa e digitando 3.2, 5.0, 1.8, 4.4,
a tela tem de ficar assim:
Consumo do dia em GB: 3.2
Consumo do dia em GB: 5.0
Consumo do dia em GB: 1.8
Consumo do dia em GB: 4.4
Menor consumo do mes: 1.8 GB
# Exercicio 03 — padrao extremo: o menor consumo, com candidato honesto.
# TODO: crie uma lista vazia para os consumos.
# TODO: com um for que da 4 voltas, peca "Consumo do dia em GB: "
# (converta para float) e acrescente na lista com append.
# TODO: comece o candidato a menor com o PRIMEIRO item da lista
# (consumos[0]) -- nunca com 0.
# TODO: com um for percorrendo a lista, troque o candidato sempre que
# achar um consumo menor do que ele.
# TODO: mostre o menor consumo do mes.
Exercício 04¶
Escreva um programa que peça o consumo diário (em GB) de 5 dias, guarde
numa lista vazia com append e, depois, monte uma lista nova só com os
consumos que passaram de 3.0 GB (a meta do plano). Mostre a lista nova e
quantos dias passaram da meta.
Use exatamente estes textos, para a sua sessão bater com a publicada:
Como deve ficar. Rodando o programa e digitando 4.2, 1.8, 5.0, 0.9, 3.3,
a tela tem de ficar assim:
Consumo do dia em GB: 4.2
Consumo do dia em GB: 1.8
Consumo do dia em GB: 5.0
Consumo do dia em GB: 0.9
Consumo do dia em GB: 3.3
Consumos acima da meta: [4.2, 5.0, 3.3]
Quantos: 3
# Exercicio 04 — padrao filtrar para uma lista nova.
# TODO: crie uma lista vazia para os consumos.
# TODO: com um for que da 5 voltas, peca "Consumo do dia em GB: "
# (converta para float) e acrescente na lista com append.
# TODO: crie uma lista NOVA vazia para os consumos acima da meta (3.0).
# TODO: com um for percorrendo a lista de consumos, acrescente na lista
# nova so os que forem maiores que a meta.
# TODO: mostre a lista nova e quantos itens ela tem.
Exercício 05¶
Escreva um programa que peça o gasto de 5 dias soltos (em reais), guarde
cada um numa lista vazia com append e, depois, monte uma lista nova com
o saldo acumulado — quanto já tinha sido gasto até cada dia, um valor por
posição. Mostre a lista final.
Use exatamente estes textos, para a sua sessão bater com a publicada:
Como deve ficar. Rodando o programa e digitando 20.0, 15.0, 30.0, 10.0, 25.0,
a tela tem de ficar assim:
Gasto do dia: 20.0
Gasto do dia: 15.0
Gasto do dia: 30.0
Gasto do dia: 10.0
Gasto do dia: 25.0
Saldo gasto acumulado: [20.0, 35.0, 65.0, 75.0, 100.0]
# Exercicio 05 — padrao acumular numa lista nova.
# TODO: crie uma lista vazia para os gastos.
# TODO: com um for que da 5 voltas, peca "Gasto do dia: " (converta para
# float) e acrescente na lista com append.
# TODO: crie uma lista NOVA vazia para o acumulado, e um total que comeca
# em 0.
# TODO: com um for percorrendo os gastos, some cada gasto ao total e, na
# MESMA volta, acrescente o total na lista nova.
# TODO: mostre a lista do saldo acumulado.
Exercício 06¶
Uma professora quer fechar o boletim de uma turma. Escreva um programa que peça
6 notas, guarde cada uma numa lista vazia com append e, depois, percorra
a lista uma única vez para calcular duas coisas ao mesmo tempo: a soma de
todas as notas e quantos alunos ficaram abaixo de 6.0.
É o padrão "somar tudo" e o padrão "contar sob condição" no mesmo laço: a soma
cresce em toda volta, a contagem só cresce quando o if dá certo.
Use exatamente estes textos, para a sua sessão bater com a publicada:
A média da turma é a soma dividida por len(notas) — e é de propósito que o
enunciado pede a soma, e não a média: um laço que devolve a soma serve para
as duas perguntas, e você já sabe o que a divisão feita na hora errada faz.
Teste também estes, à mão, trocando as seis notas digitadas:
| Notas digitadas | Soma | Abaixo de 6.0 |
|---|---|---|
| 6.0 6.0 6.0 6.0 6.0 6.0 | 36.0 | 0 |
| 5.9 6.0 6.1 5.0 9.0 10.0 | 42.0 | 2 |
| 0.0 0.0 0.0 0.0 0.0 0.0 | 0.0 | 6 |
A primeira linha é a fronteira: 6.0 não está abaixo de 6.0. Se o seu
programa contar 6 aí, o teste é <= onde devia ser <.
Como deve ficar. Rodando o programa e digitando 5.9, 6.0, 6.1, 5.0, 9.0, 10.0,
a tela tem de ficar assim:
# Exercicio 06 — somar e contar juntos, no mesmo laco.
# TODO: crie uma lista vazia para as notas.
# TODO: com um for que da 6 voltas, peca "Nota: " (converta para float)
# e acrescente na lista com append.
# TODO: crie um acumulador da soma (comecando em 0) e um contador de notas
# abaixo de 6.0 (tambem comecando em 0).
# TODO: com UM SO for percorrendo a lista de notas, some cada nota a soma
# e, com um if, some 1 ao contador quando a nota for menor que 6.0.
# TODO: mostre a soma (uma casa decimal) e quantas ficaram abaixo de 6.0.