Exercícios Resolvidos de Arquivos

Ver Teoria

Enunciado

Um professor salvou no arquivo "p1.txt": a matrícula e o resultado da prova P1 de cada aluno

de sua turma e no arquivo "t1.txt": a matrícula e a nota do teste T1 de cada aluno de sua

turma. Faça um programa que monte e exiba uma lista onde cada elemento é composto por:

[matrícula do aluno, média G1, [nota da P1, nota da T1]]

A média da G1 é calculada por: (P1*0.8 + T1*0.2)

No final seu programa deve gravar, no arquivo preocupacoes.txt, a matrícula e a média dos

alunos que tiraram menos de 4 na prova P1 ou menos do que 7 no teste T1

Seu programa também deve gravar, no arquivo notas.txt, a matrícula, a média, a nota P1 e a

nota T1 de todos os alunos.

t1.txt:

10 5.8

20 7.6

30 9.0

40 9.3

50 8.9

p1.txt:

10 8.0

20 3.9

30 9.8

40 3.2

50 4.8

Passo 1

Fala aí, meu rei! Essa questão tem a carinha que vai ter a questão da sua prova...

Então se liga… Bora começar abrindo os arquivos. A gente pode já abrir os 4 direto!

Mas se liga nas permissões, tá? Eu usei ‘r’ nos arquivos fornecidos pelo professor, que são somente pra leitura, e usei ‘w’ nos arquivos que o enunciado manda criar!

Agora a gente precisa ler as notas e fazer os trâmites que o enunciado tá mandando… Bora lá!

Passo 2

Primeiro, tá mandando a gente criar uma lista e armazenar a matrícula, média e as notas no seguinte formato:

Ou seja, nossa lista vai ter uma sublista nesse formato pra cada aluno. E talvez você tenha pensado em começar a ler um arquivo de cada vez pra tentar construir esse modelo, mas a gente pode iterar pelos dois arquivos, p1 e t1, ao mesmo tempo! Pra isso, a gente usa a função zip() dentro do laço for:

E, as variáveis p1l e t1l recebem, a cada loop, uma linha de cada um dos arquivos que foram passados dentro da função zip(), respectivamente. Agora, a gente pode começar a tratar os dados. Vamos começar limpando o \n do final de cada linha e separando os dados em uma lista. Pra isso, vamos usar os métodos strip() e split(‘ ‘), respectivamente...

Agora, nossos dados estão separados dentro de listas, todos no formato de string. Pra facilitar nossas vidas, que tal a gente criar uma variável pra cada informação, com seus devidos formatos?

Pronto! A partir daqui, a gente tem uma variável inteira chamada mat (pra matrícula), e duas outras pra salvar as notas da p1 e t1, no formato float. Repara que as matrículas são iguais nos dois arquivos, então tanto faz a gente pegar a matrícula da p1 ou t1. Agora, partiu calcular a média de acordo com a fórmula que o professor passou no enunciado:

Pronto! Agora a gente já tem a média calculada e tem todos os outros dados. Vamos começar a salvar esses dados no padrão que foi mostrado no enunciado dentro da lista (lista que eu chamei de lista por falta de criatividade).

Mas vamo lá! Pra adicionar um novo elemento na lista, bora usar o método append(), que acrescenta um elemento no final de uma lista existente…

E pronto! Dessa forma, todos os alunos vão ter seus dados gravados na lista no formato que o prof falou… Agora, o enunciado também manda a gente escrever umas paradas nos outros arquivos que a gente abriu. Bora lá!

Passo 3

Bom, primeiro a gente precisa escrever no arquivo “notas.txt”, o matrícula, seguido da média e notas p1 e t1 de cada aluno, separado por espaços. A gente pode escrever usando o método de arquivos write(), que recebe UMA STRING como parâmetro. Então, a gente pode usar formatação de string pra escrever os dados com facilidade...

E prontinho… Cuidado que o print() que a gente tá acostumado a usar pula linha automáticamente depois que a gente chama, mas o write de arquivos não. Por isso, temos que por um \n ali no final!

E agora a gente precisa escrever no arquivo preocupacoes.txt a matrícula e a média dos alunos que tiraram menos de 4 na P1 OU menos de 7 no T1. Vamos usar um if pra testar nossas condições...

Repara que a gente usou a mesma tática da formatação de string, e também não esquecemos do “\n” no fim da linha…

Show! Agora, só falta a gente fechar os arquivos e exibir a lista pro usuário...

Passo 4

Você não achou que a gente tinha terminado antes de fechar os arquivos, né? hahaha

Precisamos fechar todos os arquivos que abrimos… E, como o enunciado também manda a gente exibir a lista que criamos, bora dar um print nessa danada!

E agora,sim a gente pode dizer que terminou o exercício!

Até a próxima, maninho! é nóssss

Resposta