Распечатать гистограмму в Python 3 - PullRequest
2 голосов
/ 26 января 2011

У меня есть слово length_of_word | словарь повторений, и я хочу создать гистограмму, похожую на приведенную ниже, используя только встроенные функции python, но не ноль или что-то подобное.

http://dev.collabshot.com/show/723400/

Пожалуйста, помогите мне хотя бы с некоторыми указателями.

1 Ответ

3 голосов
/ 26 января 2011

Полагаю, у вас должен быть dict, похожий на этот, верно?

>>> d = {1:1, 2:10, 3:10, 4:6, 5:5, 6:4, 7:2, 8:1}
>>> d
{1: 1, 2: 10, 3: 10, 4: 6, 5: 5, 6: 4, 7: 2, 8: 1}

Если так, у меня есть функция, которая делает трюк:

>>> def histo(dict_words):
    # Get max values, plus delta to ease display
    x_max = max(dict_words.keys()) + 2
    y_max = max(dict_words.values()) + 2
    # print line per line
    print '^'
    for j in range(y_max, 0, -1):
        s = '|'
        for i in range(1, x_max):
            if i in dict_words.keys() and dict_words[i] >= j:
                s += '***'
            else:
                s += '   '
        print s
    # print x axis
    s = '+'
    for i in range(1, x_max):
        s += '---'
    s += '>'
    print s
    # print indexes
    s = ' '
    for i in range(1, x_max):
        s += ' %d ' % i
    print s


>>> histo(d)
^
|                           
|                           
|   ******                  
|   ******                  
|   ******                  
|   ******                  
|   *********               
|   ************            
|   ***************         
|   ***************         
|   ******************      
|************************   
+--------------------------->
  1  2  3  4  5  6  7  8  9 
>>> 

Хорошо, есть немного больше работы, чтобы отобразить значения слева и правильно отформатировать числа больше 10, чтобы не было сдвига в индексах, но я думаю, что это хорошее начало: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...