Informática, perguntado por dragonoath69, 10 meses atrás

(Python).Faça um programa, usando funções, que leia o nome de um arquivo texto contendo várias palavras por linha. Produza um dicionário com todas as palavras do arquivo e suas respectivas contagens de ocorrência. Escreva, ordenado alfabeticamente todas as palavras que ocorreram mais que cinco vezes no arquivo.


migueljnm940: lol, complicadinho, esse tipo de questão recomendo por no stack overflow, senão vai vir gente querendo ponto free, lá tem mais pessaos que entendem desse assunto :-)

Soluções para a tarefa

Respondido por GeBEfte
3

No programa, logo abaixo, é solicitado do usuário o nome do arquivo a ser lido, nos exemplos anexados este arquivo era "teste.txt", sendo que o arquivo deve estar na mesma pasta do programa.

Após o código, comento um pouco sobre o que foi feito.

Obs.: Os pontos que precedem as linhas estão para garantir a indentação, não fazem parte do código.

--------------------------------------------------------------------

nome=str(input('Nome do arquivo: ')).strip()

f=open(nome,"r")

s=f.read()

s=s.replace('.','')

s=s.replace(',','')

s=s.lower().split()

dicionario=dict()

for c in s:

.....if c not in dicionario.keys():

..........dicionario[c]=1

.....else:

..........dicionario[c]+=1

print(f'\n\n{dicionario},\n\n')

for c in sorted(dicionario):

.....if dicionario[c]>5:

.....print(f'{c} : {dicionario[c]} ocorrências.')

f.close()

--------------------------------------------------------------------

Comentários:

--> Como já dito, começamos o código solicitando do usuário o "nome" do arquivo.

--> Utilizamos a função open() passando como parâmetros o nome do arquivo e "r" para indicar que será feita apenas a leitura do arquivo.

Note que a variável "f" se torna a "representação" do arquivo, um objeto.

--> Para facilitar a manipulação do texto presente no arquivo, utilizamos o método read() para retornar todo texto do arquivo e guardamos na variável "s".

--> Agora fazemos algumas manipulações no conteúdo do texto afim de capturar as palavras de forma correta. Utilizamos o método replace() para substituir todos pontos e todas virgulas por um caractere vazio e, depois, utilizamos os métodos lower() e split(). O método lower() foi utilizado para deixar todos caracteres em minusculo evitando que haja diferenciação entre uma mesma palavra digitada com capitalização. Já o split() tem como função separar o texto pelos espaços guardando em uma lista.

--> Até agora, temos em "s" uma lista com todas palavras em letra minuscula.

--> Depois de declararmos o dicionario, utilizamos utilizamos um laço for para percorrer toda palavra "c" na lista "s". Dentro do for, temos uma estrutura condicional (if/else). Essa estrutura verifica se a palavra atual é uma chave (key) no dicionario, em outras palavras, verifica se esta palavra já apareceu antes.

--> Caso negativo, criamos outro item no dicionario, sendo que a chave será a palavra (c) e damos 1 como valor (primeira ocorrência da palavra). Caso positivo (palavra repetida), o item do dicionario cuja chave tem nome igual a palavra atual do laço tem seu valor incrementado.

--> Até agora, temos o dicionario montado com todas palavras (chaves) e suas respectivas quantidades de ocorrência (valores).

--> Utilizamos outro laço for para percorrer cada palavra na lista contendo todas chaves do dicionario já ordenadas alfabeticamente (utilização da função sorted()).

--> Dentro do laço temos um condicional. Caso o valor do item do dicionario cuja chave tem nome "c" for superior a 5, mostramos ao usuário a chave (palavra do texto) e, também, o numero de ocorrências.

--> Por fim, fechamos o arquivo "f" pelo método close().

Obs.: Tenha em vista que esta não é a unica ou a melhor forma para resolver o exercício.

Anexos:

GeBEfte: Outra consideração que não foi feita no código é quanto a outros sinais de pontuação como interrogação ("?") ou exclamação ("!"). Seria necessário desconsidera-los no código como feito para a virgula e ponto ou utilizando outro método qualquer.
Perguntas interessantes