2011-01-26 6 views
2

J'ai un mot length_of_word | Répétitions dictionnaire et je veux faire un histogramme de celui-ci comme celui du lien ci-dessous en utilisant seulement python construit dans des fonctions non numpy ou quelque chose comme ça.Imprimer un histogramme en python 3

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

S'il vous plaît, aidez-moi au moins avec quelques pointeurs.

+0

Vous devrez au moins fournir un exemple de votre entrée et votre sortie attendue. Dites, 5 entrées du dictionnaire et l'histogramme correspondant. – aaronasterling

+0

Vous auriez probablement dû mentionner que ceci fait partie de l'examen final de la classe Python 1 d'Oreilly. :) – Justin

Répondre

3

Je suppose que vous devez avoir un dict qui ressemble à celui-ci, non?

>>> 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} 

Si oui, j'ai une fonction qui fait l'affaire:

>>> 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 
>>> 

Ok, il y a un peu plus de travail pour afficher les valeurs de gauche et de formater les numéros correctement supérieurs à 10 ne pas avoir changement dans les index, mais je pense que c'est un bon début :-)