Python
Мало кто не знает знаменитый роман Л. Н. Толстого «Война и мир». Это довольно объёмное произведение лежит в архиве voina-i-mir.zip. Напишите программу, которая подсчитывает статистику по буквам (не только русского алфавита) в этом романе и выводит результат на экран (или в файл). Результат должен быть отсортирован по частоте встречаемости букв (по возрастанию или убыванию). Регистр символов имеет значение.
Постарайтесь написать программу так, чтобы для её работы не требовалась распаковка архива вручную.
Я так понимаю без модуля zipfile не обойтись?
Домашние задания: Информатика
Голову сломал, помогите.
import zipfile
def print_txt():
print('+---------+----------+')
print('| буква | частота |')
print('+---------+----------+')
class Static:
def __init__(self, file_name):
self.file_name = file_name
self.sum = None
self.sorted_tuple = None
self.stat = {}
def unzip(self):
z_file = zipfile.ZipFile(self.file_name, 'r')
for filename in z_file.namelist():
z_file.extract(filename)
def open_file(self):
if self.file_name.endswith('.zip'):
self.unzip()
with open(self.file_name, 'r', encoding='cp1251') as file:
for line in file:
self.sorted_char(line)
def sorted_char(self, line):
for ch in line:
if ch in self.stat:
self.stat[ch] += 1
else:
if ch.isalpha():
self.stat[ch] = 1
def sorted_tup(self):
print_txt()
self.sum = 0
self.sorted_tuple = sorted(self.stat.items(), key=lambda x: x[1], reverse=False)
for key, value in self.sorted_tuple:
if len(str(value)) == 1:
space = ' '
elif len(str(value)) == 2:
space = ' '
elif len(str(value)) == 3:
space = ' '
elif len(str(value)) == 4:
space = ' '
elif len(str(value)) == 5:
space = ' '
else:
space = ''
print('| {} | {}{} |'.format(key, value, space))
self.sum += value
self.print_sum()
def print_sum(self):
print('+---------+----------+')
print('| итого | {} |'.format(self.sum))
print('+---------+----------+')
static = Static(file_name='python_snippets/voyna-i-mir.txt')
static.open _file()
static.sorted_tup()
def print_txt():
print('+---------+----------+')
print('| буква | частота |')
print('+---------+----------+')
class Static:
def __init__(self, file_name):
self.file_name = file_name
self.sum = None
self.sorted_tuple = None
self.stat = {}
def unzip(self):
z_file = zipfile.ZipFile(self.file_name, 'r')
for filename in z_file.namelist():
z_file.extract(filename)
def open_file(self):
if self.file_name.endswith('.zip'):
self.unzip()
with open(self.file_name, 'r', encoding='cp1251') as file:
for line in file:
self.sorted_char(line)
def sorted_char(self, line):
for ch in line:
if ch in self.stat:
self.stat[ch] += 1
else:
if ch.isalpha():
self.stat[ch] = 1
def sorted_tup(self):
print_txt()
self.sum = 0
self.sorted_tuple = sorted(self.stat.items(), key=lambda x: x[1], reverse=False)
for key, value in self.sorted_tuple:
if len(str(value)) == 1:
space = ' '
elif len(str(value)) == 2:
space = ' '
elif len(str(value)) == 3:
space = ' '
elif len(str(value)) == 4:
space = ' '
elif len(str(value)) == 5:
space = ' '
else:
space = ''
print('| {} | {}{} |'.format(key, value, space))
self.sum += value
self.print_sum()
def print_sum(self):
print('+---------+----------+')
print('| итого | {} |'.format(self.sum))
print('+---------+----------+')
static = Static(file_name='python_snippets/voyna-i-mir.txt')
static.open _file()
static.sorted_tup()
Dzalal Ibragimov
теперь усложним задачу. Без 'import zipfile' и 'lambda' )))
import zipfile
from collections import Counter
def process_text(text):
counter = Counter(text)
return counter
def main():
archive_name = "voina-i-mir.zip"
text_file_name = "voina-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}")
if __name__ == "__main__":
main()
from collections import Counter
def process_text(text):
counter = Counter(text)
return counter
def main():
archive_name = "voina-i-mir.zip"
text_file_name = "voina-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}")
if __name__ == "__main__":
main()
Т.е. нужно записать сколько раз какая буква попалась? А в архиве файлы .docx или .txt?
Dzalal Ibragimov
.txt
Dzalal Ibragimov
voyna-i-mir.txt Но название здесь мало играет роль
В 1.в 2.б 3.г 4.а Досвидания!
import zipfile
from collections import Counter
# Открываем архив и извлекаем содержимое файла 'voina-i-mir.txt'
with zipfile.ZipFile('voina-i-mir.zip', 'r') as zip_file:
with zip_file.open('voina-i-mir.txt', 'r') as book_file:
book_content = book_file.read().decode('utf-8')
# Создаем словарь, где ключ - это символ, а значение - количество его вхождений в тексте
char_freq = Counter(book_content)
# Сортируем символы по частоте встречаемости
sorted_chars = sorted(char_freq.items(), key=lambda x: x[1], reverse=True)
# Выводим результат
for char, freq in sorted_chars:
print(char, freq)
В этом коде мы открываем архив 'voina-i-mir.zip' и извлекаем содержимое файла 'voina-i-mir.txt'. Затем мы используем Counter из модуля collections для подсчета частоты встречаемости символов в тексте. Далее мы сортируем символы по частоте встречаемости и выводим результат на экран при помощи цикла for.
В этом примере мы используем декодирование 'utf-8', чтобы правильно прочитать содержимое файла в кодировке UTF-8. Если файл использует другую кодировку, ее нужно передать в соответствующем параметре функции decode().
from collections import Counter
# Открываем архив и извлекаем содержимое файла 'voina-i-mir.txt'
with zipfile.ZipFile('voina-i-mir.zip', 'r') as zip_file:
with zip_file.open('voina-i-mir.txt', 'r') as book_file:
book_content = book_file.read().decode('utf-8')
# Создаем словарь, где ключ - это символ, а значение - количество его вхождений в тексте
char_freq = Counter(book_content)
# Сортируем символы по частоте встречаемости
sorted_chars = sorted(char_freq.items(), key=lambda x: x[1], reverse=True)
# Выводим результат
for char, freq in sorted_chars:
print(char, freq)
В этом коде мы открываем архив 'voina-i-mir.zip' и извлекаем содержимое файла 'voina-i-mir.txt'. Затем мы используем Counter из модуля collections для подсчета частоты встречаемости символов в тексте. Далее мы сортируем символы по частоте встречаемости и выводим результат на экран при помощи цикла for.
В этом примере мы используем декодирование 'utf-8', чтобы правильно прочитать содержимое файла в кодировке UTF-8. Если файл использует другую кодировку, ее нужно передать в соответствующем параметре функции decode().
Попробуйте с гдз... Это правильно
#Звёздочки тут обозначают пробелы
import collections
import zipfile
def unzip(archive):
* zfile = zipfile.ZipFile(archive, 'r')
* for i_file_name in zfile.namelist():
** zfile.extract(i_file_name)
* * zfile.close()
def collect_stats(file_name):
* result = {}
*if file_name.endswith('.zip'):
** unzip(file_name)
**file_name = ''.join((file_name[:-3], 'txt'))
* text_file = open(file_name, 'r', encoding='utf-8')
* for i_line in text_file:
** for j_char in i_line:
*** if j_char.isalpha():
**** if j_char not in result:
***** result[j_char] = 0
**** result[j_char] += 1
*text_file.close()
* return result
def print_stats(stats):
* print("+{:-^19}+".format('+'))
* print("|{: ^9}|{: ^9}|".format('буква', 'частота'))
* print("+{:-^19}+".format('+'))
* for char, count in stats.items():
** print("|{: ^9}|{: ^9}|".format(char, count))
* print("+{:-^19}+".format('+'))
def sort_by_frequency(stats_dict):
* sorted_values = sorted(stats_dict.values(), reverse=True)
* sorted_dict = collections.OrderedDict()
* for i_values in sorted_values:
** for j_key in stats_dict.keys():
*** if stats_dict[j_key] == i_values:
**** sorted_dict[j_key] = stats_dict[j_key]
* return sorted_dict
file_name = 'voyna-i-mir.zip'
stats = collect_stats(file_name)
stats = sort_by_frequency(stats)
print_stats(stats)
import collections
import zipfile
def unzip(archive):
* zfile = zipfile.ZipFile(archive, 'r')
* for i_file_name in zfile.namelist():
** zfile.extract(i_file_name)
* * zfile.close()
def collect_stats(file_name):
* result = {}
*if file_name.endswith('.zip'):
** unzip(file_name)
**file_name = ''.join((file_name[:-3], 'txt'))
* text_file = open(file_name, 'r', encoding='utf-8')
* for i_line in text_file:
** for j_char in i_line:
*** if j_char.isalpha():
**** if j_char not in result:
***** result[j_char] = 0
**** result[j_char] += 1
*text_file.close()
* return result
def print_stats(stats):
* print("+{:-^19}+".format('+'))
* print("|{: ^9}|{: ^9}|".format('буква', 'частота'))
* print("+{:-^19}+".format('+'))
* for char, count in stats.items():
** print("|{: ^9}|{: ^9}|".format(char, count))
* print("+{:-^19}+".format('+'))
def sort_by_frequency(stats_dict):
* sorted_values = sorted(stats_dict.values(), reverse=True)
* sorted_dict = collections.OrderedDict()
* for i_values in sorted_values:
** for j_key in stats_dict.keys():
*** if stats_dict[j_key] == i_values:
**** sorted_dict[j_key] = stats_dict[j_key]
* return sorted_dict
file_name = 'voyna-i-mir.zip'
stats = collect_stats(file_name)
stats = sort_by_frequency(stats)
print_stats(stats)
это подсчитайте, оглавление включительно?
Похожие вопросы
- Срочно Помогите написать программу по задаче (на любом языке программирования)
- Помогите с информатикой
- Помогите решить пж
- ПОМОГИТЕ С ИНФОРМАТИКОЙ 9 КЛАСС!
- Помогите пожалуйста решить задачу по программированию (Pasсal ABC.net).
- Написать программы с помощью паскаля. Срочно помогите!
- Пожалуйста, помогите! Решите тест.
- Помогите по информатике
- Короче, помогите написать программу на языке паскаля где нужно--->
- Помогите написать апрель пятница линиями с помощью graphabc