Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 22.12.2017
Сообщений: 34
1

Вывести на экран гистограмму слов длиной более 3 символов из файла

16.07.2018, 23:09. Показов 2306. Ответов 6

Здравствуйте, форумчане. Можете подсобить с задачкой?

В качестве аргумента командной строки поступает путь к файлу (или не поступает — тогда обрабатывать поток стандартного ввода).

Вывести на экран гистограмму слов длины > 3 в означенном файле следующего вида:

##### word1
################## word2
################################### word3
########## word4
Столбцы должны быть выровнены по левому краю. Максимальная длина записи гистограммы — 56 хешиков. Между хешиками и словом должны быть > 0 пробельных символов.

У меня есть код, который просто находит все слова, а сбоку пишет их количество
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#! Программа подсчета слов в файле
import os
 
 
def get_words(filename):
 
    with open(filename, encoding="utf8") as file:
        text = file.read()
    text = text.replace("\n", " ")
    text = text.replace(",", "").replace(".", "").replace("?", "").replace("!", "")
    text = text.lower()
    words = text.split()
    words.sort()
    return words
 
 
def get_words_dict(words):
    words_dict = dict()
 
    for word in words:
        if word in words_dict:
            words_dict[word] = words_dict[word] + 1
        else:
            words_dict[word] = 1
    return words_dict
 
 
def main():
    filename = input("Введите путь к файлу: ")
    if not os.path.exists(filename):
        print("Указанный файл не существует")
    else:
        words = get_words(filename)
        words_dict = get_words_dict(words)
        print("Кол-во слов: %d" % len(words))
        print("Кол-во уникальных слов: %d" % len(words_dict))
        print("Все использованные слова:")
        for word in words_dict:
             print(word.ljust(20), words_dict[word])
 
 
if __name__ == "__main__":
    main()
Хелпаните, чем сможете
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2018, 23:09
Ответы с готовыми решениями:

Вывести на экран в тестовом режиме гистограмму длиной 10 введенных с клавиатуры слов
Задача Программа которая выводит на экран в тестовом режиме гистограмму длиной 10 введенных с...

Вывести на экран все элементы заданного символьного массива Y$(8), длиной не более 5 символов
Вывести на экран все элементы заданного символьного массива Y$(8) длиной не более 5 символов....

Вывести на экран монитора горизонтально расположенную строку текста длиной не более десяти символов
Вывести на экран монитора горизонтально расположенную строку текста длиной не более десяти символов...

Вывести на экран монитора горизонтально расположенную строку текста длиной не более десяти символов
Может кто-то помочь? Вывести на экран монитора горизонтально расположенную строку текста длиной...

6
Эксперт Python
5386 / 3811 / 1212
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
17.07.2018, 13:59 2
Python
1
2
3
4
5
6
7
8
9
10
11
from collections import Counter
import re
 
filename=r"gore-ot-uma.txt"
with open(filename) as f:
    counter = Counter(re.findall('\w+',f.read()))
    for word,cnt in counter.most_common():
        if len(word) > 3:
            if cnt >56: cnt = 56
            print("#" * cnt, word)
            #print(("#" * cnt).ljust(60), word)
Вывести на экран гистограмму слов длиной более 3 символов из файла

Как должны быть выровнены слова я так и не понял.
0
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
17.07.2018, 17:19 3
Лучший ответ Сообщение было отмечено Reywal как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import os
def get_words(filename):
    """This function formats the text """
    with open(filename, encoding = "ISO-8859-1") as file:
        text = file.read()
    text = text.replace("\n", " ")
    text = text.replace(",", "").replace(".", "").replace("?", "").replace("!", "").replace(";","").replace(":","")
    text = text.lower()
    words = text.split()
    return words
 
def get_words_dict(words):
    """This functions writes words into the dictionary """
    words_dict = dict()
 
    for word in words:
        if word in words_dict:
            words_dict[word] = words_dict[word] + 1
        else:
            words_dict[word] = 1
    return words_dict
    
filename = input("Введите путь к файлу: ")
if not os.path.exists(filename):
    print("Указанный файл не существует, введите строки","\n")
    words=list(eval(input()))
    
else:
    words = get_words(filename)
for x in set(words):
    if(len(x)>3 and words.count(x)<=56):
        print('{0:<56}'.format(words.count(x)*'#'),'{0:<10}'.format(x))
1
Эксперт Python
5386 / 3811 / 1212
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
17.07.2018, 17:35 4
Цитата Сообщение от W014ara Посмотреть сообщение
text.replace(",", "").replace(".", "").replace("?", "").replace("!", "").replace(";","").replace(":","")
Ну а че не все символы пунктуации тогда уж?
Python
1
2
3
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>>
Вот сколько еще замен не хватает. Пиши дальше.
0
Просто Лис
Эксперт Python
4453 / 2844 / 936
Регистрация: 17.05.2012
Сообщений: 8,275
Записей в блоге: 9
18.07.2018, 07:38 5
Цитата Сообщение от Garry Galler Посмотреть сообщение
if cnt >56: cnt = 56
Тут надо нормировать данные, а не отсекать по пределу. В идеале пересчитать в проценты. 100% = "56 хешиков".
0
Эксперт Python
5386 / 3811 / 1212
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
18.07.2018, 12:33 6
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Тут надо нормировать данные,
Может быть. Но в задании это четко не сказано (тем более вариантов нормировки может быть десятки), как и о конечном варианте форматирования результата. Поэтому ТС'у дана\выловлена "рыба" (способом, согласующимся с python дзен) - дальше пускай сам готовит согласно должному рецепту.
0
Просто Лис
Эксперт Python
4453 / 2844 / 936
Регистрация: 17.05.2012
Сообщений: 8,275
Записей в блоге: 9
18.07.2018, 15:39 7
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python3
# coding: utf-8
from collections import Counter
import re
 
filename = 'dolgaja_doroga_k_druzhbe.txt'
with open(filename) as f:
    text = f.read()
 
words = re.findall('\w+', text)
counter = Counter(filter(lambda x: len(x) > 3, words))
ls = counter.most_common()
 
_, m = ls[0]
k = 1. / m * 56
 
for word,cnt in ls:
    l = int(cnt * k)
    if l == 0:
        break
    print("#" * l, word)
Миниатюры
Вывести на экран гистограмму слов длиной более 3 символов из файла  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2018, 15:39
Помогаю со студенческими работами здесь

Вывести на экран монитора горизонтально расположенную строку текста длиной не более двадцати символов
ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ 1. Очистить экран монитора и при необходимости установить...

Вывести на экран монитора горизонтально расположенную строку текста длиной не более пятнадцати символов
Вывести на экран монитора горизонтально расположеую строку текста длиной не более пятнадцати...

Вывести на экран монитора горизонтально расположенную строку текста длиной не более десяти символов
Вывести на экран монитора горизонтально расположенную строку текста длиной не более десяти ...

Вывести на экран монитора горизонтальную строку текста длиной не более двадцати символов светло-зеленого
1. Очистить экран монитора и при необходимости установить требуемый цвет фона. 2. Вывести один...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru