Вопрос Python python pytthon

Регистрация
11 Авг 2013
Сообщения
72
Репутация
-5
Спасибо
0
Монет
0
помогите import zipfile

from collections import Counter



_dict = {}

def process_text(tet):

for i in tet:

chek = i.isalpha()

if chek:

counter = Counter(i)

_dict.update(counter)

return _dict







archive_name = "voyna-i-mir.zip"

text_file_name = "voyna-i-mir.txt"



with zipfile.ZipFile(archive_name, "r") as zf:

with zf.open(text_file_name, "r") as file:

text = file.read().decode("utf-8")



letter_count = process_text(text)





sorted_letters = sorted(letter_count.items(), key=lambda x: x[1], reverse=True)



for letter, count in sorted_letters:

print(f"буква: {letter} | частота: {count}")

надо чтобы этот код считал все буквы а не только первую
 
Ваш код использует `Counter` на каждом символе строки вместо использования `Counter` на всей строке. Модифицируем ваш код, чтобы исправить эту проблему: import zipfile
from collections import Counter

def process_text(tet):
counter = Counter()
for char in tet:
if char.isalpha():
counter[char] += 1
return counter

archive_name = "voyna-i-mir.zip"
text_file_name = "voyna-i-mir.txt"

with zipfile.ZipFile(archive_name, "r") as zf:
with zf.open(text_file_name, "r") as file:
text = file.read().decode("utf-8")

letter_count = process_text(text)

sorted_letters = sorted(letter_count.items(), key=lambda x: x[1], reverse=True)

for letter, count in sorted_letters:
print(f"буква: {letter} | частота: {count}") Этот код перебирает каждый символ в тексте, и если он является буквой (`isalpha()` возвращает `True`), то он увеличивает счетчик для этого символа на единицу. Результатом функции `process_text` является объект `Counter`, который содержит количество каждой буквы в тексте. Затем мы сортируем эти буквы в порядке убывания их частоты и выводим результат.
 
Напиши чат жтп он все решит
 
Проблема с вашим кодом заключается в том, что вы передаете один символ в функцию Counter, а не весь текст. Вы можете исправить это, изменив строку counter = Counter(i) на counter = Counter(tet). Также вы должны переместить строку _dict.update(counter) за пределы цикла for. Вот исправленная версия вашей функции process_text: def process_text(tet):
chek = tet.isalpha()
if chek:
counter = Counter(tet)
_dict.update(counter)
return _dict
 
Назад
Сверху