Faça um programa que leia, do arquivo notas.txt, as notas (valor inteiro de 0 a 10) dos
candidatos de um concurso (uma nota por candidato) e exiba a quantidade de candidatos
em cada nota, na forma de histograma, conforme exemplo abaixo (um asterisco para cada
candidato com a nota indicada).
Exemplo de entrada:
1 10
2 0
3 1
4 1
5 10
6 1
7 0
8 10
…
Exemplo da saída:
Nota 0: **
Nota 1: ***
…
Notas 10: ***
Passo 1
Fala aí, meu consagrado! Nesse exercício a gente precisa ler os dados do arquivo notas.txt, analisar e exibir. Me sinto na obrigação de te avisar que esse é o tipo que questão que cai em prova… Repito, não é um treinamento.
Então se liga, a primeira coisa que a gente vai fazer é abrir o arquivo no nosso código… Pra isso, a gente pode usar a função open(). No primeiro parâmetro a gente passa o nome do arquivo (que o enunciado diz que tem que ser notas.txt), e no segundo a operação que a gente quer. Como a gente só quer permissão de leitura, vamos usar o “r”. Fica assim:
Só que pra rodar esse programa a gente precisa ter o arquivo dentro da mesma pasta que o programa. Então, eu já vou copiar o exemplo do enunciado e salvar num arquivo com o nome certinho...
Abri o bloco de notas, escrevi igualzin e salvei na pasta do programa com o nome de notas.txt… Agora vamos continuar nosso programa!
Passo 2
Cara, já temos o arquivo aberto dentro da variável. Agora, bora construir nossa estrutura pra ler uma linha de cada vez…
Pronto! Mas, as informações estão divididas por espaços… Pra gente conseguir acessar elas separadamente, de boas, a gente pode transformar essa linha em uma lista dividida nos espaços! Pra isso a gente usa o método de string .split(‘ ‘). Mas não esquece que, no fim de cada linha do arquivo tem um “\n”.
Dessa forma os dados ficam separadinhos e a gente consegue pegar a parte que nos interessa sem preocupações.. Quer dizer, quase sem preocupações, porque tem o “\n” indesejado ali. Pra tirar ele, a gente pode usar, ANTES do split(‘ ‘), o método strip().
Aí sim, o resultado fica bonitin sem o “\n” no último elemento. Olha como a gente faz pra implementar essa parada:
Show! A gente atualizou a variável “linha”, que começou sendo a string e virou a lista sem o “\n”... Agora vamos pensar em como a gente pode usar esses dados pra contar o número de cada nota!
Passo 3
Mano… Na real, a primeira informação de cada linha é meio inútil. Segundo o enunciado é o número de inscrição, mas a gente só tá preocupado em contar as notas. Uma ideia de como fazer pra contar as notas é criar uma lista com 11 elementos (uma pra cada nota, contando com o 0), e, a cada incidência da nota no loop, a gente incrementa na lista…
Criamos essa lista fora do loop. Mas tu percebe que o índice de cada nota pode ser igual a própria nota?! Tipo, a cada nota 1, a gente incrementa a lista “notas” no índice 1, e assim por diante...
E pra fazer isso a gente pode usar o próprio valor que tem na linha…
Mas repara que a lista “linha” tava guardando todos os valores no formato de string, mas os índices de listas são valores inteiros. Por isso, a gente pode converter pra inteiro e somar 1 nesse índice!
Pronto! Depois de contar todas as notas, a gente só precisa exibir pro usuário!
Passo 4
Pô, pra exibir pro usuário a gente vai usar a função print(), e também vai usar formatação de string, tá?! Mas como a gente tem 11 informações pra exibir, bora fazer um loop…
Se liga no esquema que a gente fez ali na nota… A gente pegou a quantidade de vezes que a nota apareceu, que a gente tinha salvo na lista, e multiplicou pela string ‘*’. Assim, o resultado fica no formato do enunciado, sacou?! hihihi
Até a próxima, maninho! é nóssss