Pular para conteúdo

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.

Abrir o OnlineGDB

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.

precos = [12.0, 30.0, 8.0, 15.0]
total = 0
for preco in precos:
    total = total + preco
print(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?

medicoes = [-4, -9, -2, -6]
maior = 0
for v in medicoes:
    if v > maior:
        maior = v
print(maior)

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:

  1. a partir de uma lista de consumos, descobrir o total do mês;
  2. a partir de uma lista de notas, descobrir quantas são menores que 5;
  3. a partir de uma lista de preços, descobrir o mais caro;
  4. a partir de uma lista de temperaturas, montar uma lista só com as negativas;
  5. 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:

Consumo do dia em GB:
Consumo total do mes: ... GB

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.

Baixar ex01.py

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:

Nota:
Notas aprovadas: ...

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:

Nota: 8.0
Nota: 5.5
Nota: 7.0
Nota: 9.0
Nota: 6.0
Nota: 4.0
Notas aprovadas: 3
# 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.

Baixar ex02.py

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:

Consumo do dia em GB:
Menor consumo do mes: ... GB

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.

Baixar ex03.py

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:

Consumo do dia em GB:
Consumos acima da meta: ...
Quantos: ...

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.

Baixar ex04.py

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:

Gasto do dia:
Saldo gasto acumulado: ...

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.

Baixar ex05.py

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:

Nota:
Soma das notas: ...
Abaixo de 6.0: ...

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:

Nota: 5.9
Nota: 6.0
Nota: 6.1
Nota: 5.0
Nota: 9.0
Nota: 10.0
Soma das notas: 42.0
Abaixo de 6.0: 2
# 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.

Baixar ex06.py