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 comnitens não temlista[n]— o último élista[n - 1]; - valor ou índice:
for item in listate 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.
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
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.
| Volta | nota |
imprime |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 |
Depois de rodar, notas mudou? Por quê?
A3. O que imprime? (índice). Mesma lista, laço diferente.
| 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.
| 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ê:
- imprimir cada preço de uma lista de preços, um por linha;
- aplicar um desconto de 10% em cada preço de uma lista, mudando a lista;
- somar todos os valores de uma lista;
- trocar o terceiro item de uma lista por outro valor;
- 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.
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:
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.
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.
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.
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:
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.
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:
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."