Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Помогите решить задачу

Что нужно сделать
Есть файл 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

По дате
По рейтингу
Аватар пользователя
Новичок
1234567891011121314151617181920212223242526
 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") 
 
Аватар пользователя
Профи
10мес
12345678910111213141516171819
 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' - маму с рамой и получай

12345678
 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