Pular para conteúdo

Lista 09 · Listas

A Lista 08 foi sobre repetir um número conhecido de vezes. Esta é sobre guardar o que cada volta produz, em vez de jogar fora assim que a próxima começa — é para isso que a lista serve.

Duas coisas valem mais do que todas as outras aqui:

  • o índice começa em zero: o primeiro item é lista[0], e uma lista com n itens não tem lista[n] — o último é lista[n - 1];
  • valor ou índice: for item in lista te dá o valor de cada item; for i in range(len(lista)) te dá a posição. Use o segundo só quando precisar saber onde um item está, ou mudar um que já existe na 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 os índices. Dada a lista

cores = ["vermelho", "verde", "azul", "amarelo"]

responda: qual é o valor de cores[0]? E de cores[2]? Quanto vale len(cores)? E o que acontece se o programa tentar imprimir cores[4]?

A2. O que imprime? (valor). Rastreie linha por linha.

notas = [6.0, 8.5, 7.0]
for nota in notas:
    print(nota + 1.0)
Volta nota imprime
1
2
3

Depois de rodar, notas mudou? Por quê?

A3. O que imprime? (índice). Mesma lista, laço diferente.

notas = [6.0, 8.5, 7.0]
for i in range(len(notas)):
    notas[i] = notas[i] + 1.0
print(notas)
Volta i notas[i] antes notas[i] depois
1 0
2
3

O que este laço imprime no final? Por que ele consegue mudar notas e o da A2 não?

A4. Rastreie o append. A lista começa vazia. Complete o estado dela depois de cada linha.

pontos = []
pontos.append(10)
pontos.append(25)
pontos.append(7)
Linha pontos depois len(pontos)
pontos = []
primeiro append
segundo append
terceiro append

A5. Valor ou índice? Para cada situação, diga se o laço certo é for item in lista: ou for i in range(len(lista)):, e por quê:

  1. imprimir cada preço de uma lista de preços, um por linha;
  2. aplicar um desconto de 10% em cada preço de uma lista, mudando a lista;
  3. somar todos os valores de uma lista;
  4. trocar o terceiro item de uma lista por outro valor;
  5. mostrar cada item de uma lista junto com a sua posição (1º, 2º, 3º...).

A6. A lista vazia. Este programa pergunta quantos itens o usuário vai digitar. Se a pessoa responder 0, o que o programa imprime?

n = int(input("Quantos valores: "))
valores = []
for i in range(n):
    valores.append(int(input("Valor: ")))
print("Lista final:", valores)
print("Quantidade:", len(valores))

A7. Parsons — monte o programa. As linhas abaixo, fora de ordem, formam um programa que lê 3 preços, guarda numa lista e imprime o maior índice válido dela. Escreva-as na ordem certa.

print("Maior indice valido:", len(precos) - 1)
precos = []
for i in range(3):
    precos.append(float(input("Preco: ")))

Parte B · no computador

Exercício 01

Escreva um programa que pergunte a franquia (em GB) de 4 planos diferentes de uma operadora, monte uma lista com os quatro valores e mostre o primeiro plano, o último plano e quantos planos foram cadastrados.

Use [] para montar a lista a partir dos quatro valores lidos, e os índices 0 e 3 para pegar o primeiro e o último. len dá o total.

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

Franquia do plano 1 em GB:
Franquia do plano 2 em GB:
Franquia do plano 3 em GB:
Franquia do plano 4 em GB:
Plano 1: ... GB
Plano 4: ... GB
Total de planos: ...

Como deve ficar. Rodando o programa e digitando 10, 20, 40, 100, a tela tem de ficar assim:

Franquia do plano 1 em GB: 10
Franquia do plano 2 em GB: 20
Franquia do plano 3 em GB: 40
Franquia do plano 4 em GB: 100
Plano 1: 10 GB
Plano 4: 100 GB
Total de planos: 4
# Exercicio 01 — quatro franquias numa lista so.
# TODO: pergunte as franquias dos planos 1 a 4 (converta para int).
# TODO: monte uma lista com os quatro valores, usando [].
# TODO: mostre o plano 1 (indice 0) e o plano 4 (indice 3).
# TODO: mostre quantos planos foram cadastrados, com len.

Baixar ex01.py

Exercício 02

Escreva um programa que peça 4 notas de uma turma, uma de cada vez, e guarde cada uma numa lista que começa vazia, usando append. Ao final, mostre cada nota registrada — uma linha por nota, com for nota in notas — e quantas notas foram registradas.

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

Nota 1:
Nota 2:
Nota 3:
Nota 4:
Registrada: ...
Quantidade de notas: ...

Como deve ficar. Rodando o programa e digitando 7.5, 8.0, 6.5, 9.0, a tela tem de ficar assim:

Nota 1: 7.5
Nota 2: 8.0
Nota 3: 6.5
Nota 4: 9.0
Registrada: 7.5
Registrada: 8.0
Registrada: 6.5
Registrada: 9.0
Quantidade de notas: 4
# Exercicio 02 — quatro notas, guardadas com append.
# TODO: crie uma lista vazia para as notas.
# TODO: com um for que da 4 voltas, peca cada nota (converta para float)
#       e acrescente na lista com append.
# TODO: com for nota in notas, mostre "Registrada: <nota>" para cada uma.
# TODO: mostre a quantidade de notas registradas, com len.

Baixar ex02.py

Exercício 03

Um cliente registra o consumo diário (em GB) de 5 dias soltos — sem calendário, só "dia 1", "dia 2" e assim por diante. Escreva um programa que peça os 5 consumos e guarde cada um numa lista vazia, com append. Depois, com um segundo laço, agora usando for i in range(len(...)), mostre cada consumo junto com o número do dia, e ao final quantos dias foram registrados.

Aqui o índice não é opcional: você só sabe o número do dia porque tem i — for consumo in consumos daria os valores, mas nunca diria em qual posição cada um está.

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

Consumo em GB:
Dia 1: ... GB
Dia 2: ... GB
Dia 3: ... GB
Dia 4: ... GB
Dia 5: ... GB
Dias registrados: ...

Como deve ficar. Rodando o programa e digitando 1.2, 3.0, 0.5, 2.8, 4.1, a tela tem de ficar assim:

Consumo em GB: 1.2
Consumo em GB: 3.0
Consumo em GB: 0.5
Consumo em GB: 2.8
Consumo em GB: 4.1
Dia 1: 1.2 GB
Dia 2: 3.0 GB
Dia 3: 0.5 GB
Dia 4: 2.8 GB
Dia 5: 4.1 GB
Dias registrados: 5
# Exercicio 03 — consumo diario, rotulado pelo indice.
# TODO: crie uma lista vazia para os consumos.
# TODO: com um for que da 5 voltas, peca "Consumo em GB: " (converta para
#       float) e acrescente na lista com append.
# TODO: com um SEGUNDO for, agora "for i in range(len(...))", mostre
#       "Dia <i + 1>: <consumo> GB" para cada posicao.
# TODO: mostre quantos dias foram registrados, com len.

Baixar ex03.py

Exercício 04

O patrimônio de equipamentos de uma revenda de internet passa por um reajuste anual de 5%. Escreva um programa que pergunte o valor de 3 equipamentos, monte uma lista com os três valores, aplique o reajuste em cada um deles — mudando a própria lista, com valores[i] = valores[i] * 1.05 — e mostre a lista reajustada, um item por linha.

Isto só funciona com o índice: for v in valores: v = v * 1.05 mudaria a cópia v, não o item da lista. Por isso o laço aqui é for i in range(len(valores)), nas duas vezes que você percorre a lista.

Por que dois laços, e não um só que reajusta e imprime junto? Porque são duas tarefas: uma muda a lista, a outra mostra a lista. Separá-las custa três linhas agora e economiza o dia em que você precisar reajustar sem imprimir — ou imprimir sem reajustar. Guarde o hábito: um laço, um trabalho.

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

Valor do equipamento 1:
Valor do equipamento 2:
Valor do equipamento 3:
Equipamento 1: R$ ...
Equipamento 2: R$ ...
Equipamento 3: R$ ...

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

Valor do equipamento 1: 1000
Valor do equipamento 2: 500
Valor do equipamento 3: 200
Equipamento 1: R$ 1050.00
Equipamento 2: R$ 525.00
Equipamento 3: R$ 210.00
# Exercicio 04 — reajuste no patrimonio de equipamentos.
# TODO: pergunte o valor de 3 equipamentos (converta para float).
# TODO: monte uma lista com os tres valores, usando [].
# TODO: com for i in range(len(...)), aplique o reajuste de 5% em cada
#       item da lista (valores[i] = valores[i] * 1.05).
# TODO: com outro for i in range(len(...)), mostre "Equipamento <i + 1>:
#       R$ <valor>" para cada item, com duas casas decimais.

Baixar ex04.py

Exercício 05

Escreva um programa que pergunte o nome de 3 produtos que uma pessoa colocou no carrinho de compras, monte uma lista com os três nomes e mostre cada um deles, um por linha, com for item in carrinho. Ao final, mostre quantos itens tem no carrinho.

Uma lista guarda texto do mesmo jeito que guarda número — os colchetes e o append não mudam.

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

Produto 1:
Produto 2:
Produto 3:
No carrinho: ...
Itens no carrinho: ...

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

Produto 1: fone
Produto 2: carregador
Produto 3: capinha
No carrinho: fone
No carrinho: carregador
No carrinho: capinha
Itens no carrinho: 3
# Exercicio 05 — carrinho de compras, uma lista de textos.
# TODO: pergunte o nome de 3 produtos.
# TODO: monte uma lista com os tres nomes, usando [].
# TODO: com for item in carrinho, mostre "No carrinho: <item>" para cada um.
# TODO: mostre quantos itens tem no carrinho, com len.

Baixar ex05.py

Exercício 06

Escreva um programa que pergunte quantos dias de leitura de consumo um cliente enviou e, para cada dia, peça o consumo (em GB) e guarde numa lista que começa vazia, com append. Ao final: se a lista tiver pelo menos uma leitura, mostre a lista inteira e quantas leituras ela tem; se não tiver nenhuma, mostre só Nenhuma leitura registrada..

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

Quantos dias de leitura o cliente enviou:
Consumo em GB:
Leituras: ...
Total de leituras: ...

A sessão publicada usa 3 dias. Mas o caso que quebra um programa mal escrito é o 0: o laço de leitura dá zero voltas, a lista continua vazia, e a saída tem de ser só Nenhuma leitura registrada. — nunca uma lista vazia impressa como se fosse um resultado, nem um Total de leituras: 0 ao lado dela.

Teste também este, à mão: digite 0 como quantidade de dias. A saída inteira do programa deve ser uma linha só: Nenhuma leitura registrada..

Como deve ficar. Rodando o programa e digitando 3, 1.5, 2.0, 0.8, a tela tem de ficar assim:

Quantos dias de leitura o cliente enviou: 3
Consumo em GB: 1.5
Consumo em GB: 2.0
Consumo em GB: 0.8
Leituras: [1.5, 2.0, 0.8]
Total de leituras: 3
# Exercicio 06 — zero leituras nao e um erro.
# TODO: pergunte quantos dias de leitura o cliente enviou (converta p/ int).
# TODO: crie uma lista vazia para as leituras.
# TODO: com um for que da "dias" voltas, peca o consumo (float) e
#       acrescente na lista com append.
# TODO: se a lista tiver pelo menos uma leitura, mostre a lista inteira e
#       a quantidade; senao, mostre "Nenhuma leitura registrada."

Baixar ex06.py