


Помогите решить задачу
Что нужно сделать
Есть файл text.txt, который содержит текст. Напишите программу, которая выполняет частотный анализ, определяя долю каждой буквы английского алфавита в общем количестве английских букв в тексте, и выводит результат в файл analysis.txt. Символы, не являющиеся буквами английского алфавита, учитывать не нужно.
В файл analysis.txt выводится доля каждой буквы, встречающейся в тексте, с тремя знаками в дробной части. Буквы должны быть отсортированы по убыванию их доли. Буквы с равной долей должны следовать в алфавитном порядке.
Пример:
Содержимое файла text.txt:
Mama myla ramu.
Содержимое файла analysis.txt:
a 0.333
m 0.333
l 0.083
r 0.083
u 0.083
y 0.083
from collections import defaultdict
import string
# Читаем содержимое файла text.txt и преобразуем в нижний регистр
with open("text.txt", "r") as file:
text = file.read().lower()
# Создаем словарь для подсчета количества каждой буквы
letter_count = defaultdict(int)
total_letters = 0
# Подсчитываем количество букв английского алфавита в тексте
for char in text:
if char in string.ascii_lowercase:
letter_count[char] += 1
total_letters += 1
# Сортируем буквы по убыванию их доли в тексте
sorted_letters = sorted(letter_count.items(), key=lambda x: (-x[1], x[0]))
# Записываем результат в файл analysis.txt
with open("analysis.txt", "w") as file:
for letter, count in sorted_letters:
frequency = count / total_letters
file.write(f"{letter} {frequency:.3f}\n")
from collections import Counter
file_text = open('text.txt', 'r')
text = file_text.read()
letters = 'a b c d e f g h i j k l m n o p q r s t u v w x y z'.split()
symbol = dict(sorted(Counter(text).items()))
count_symb = 0
file_text.close()
for k, v in list(symbol.items()):
if k not in letters:
del symbol[k]
else:
count_symb += v
new_file = open('analysis.txt', 'w')
for k, v in symbol.items():
new_file.writelines(str(k) + ' ' + str(round((v / count_symb), 3)) +'\n')
new_file.close()
Чтение из файла и сортировку по убыванию доли сама делай. Просила 'Mama myla ramu' - маму с рамой и получай
from string import ascii_lowercase as acl
s = 'Mama myla, ramu'.lower()
ss = list(filter(lambda x: x in acl,s))
ns = sorted(list(set(ss)))
p = len(ss)
for i in ns:
n = float('{:.3f}'.format(ss.count(i) / p))
print(i, n)
a 0.333
l 0.083
m 0.333
r 0.083
u 0.083
y 0.083