Python - 制作每10个范围的直方图

时间:2015-01-21 04:16:53

标签: python python-3.x

我必须设计并实现一个应用程序,该应用程序在1到100的范围内创建100个随机正整数值,然后创建一个图表,显示值出现的频率。它显示有多少值落在1到10,11到12之间,依此类推。它会为输入的每个值打印一个星号。

顺便说一下: 不,如果是法定,我们必须使用清单。

图表应如下图所示。

    1  - 10   | ****
    11 - 20   | **
    21 - 30   | ****************
    31 - 40   | 
    41 - 50   | ***
    51 - 60   | ********
    61 - 70   | ****************
    71 - 80   | *****
    81 - 90   | *
    91 - 100  | ***

这是我尝试制作它。

ranking = [0,0,0,0,0,0,0,0,0,0,0]
survey = []

for i in range(1,101):
    ranking[survey[i]]+=random.randint(1,100)


#create histogram
print("%5s %5s %7s"%("Element", "Value", "Histogram"))

#start from element 1 instead of 0
for i in range(len(ranking)-1):
    x=10*i + 10
    y = x-9
    print("%7s %5d %-s"%((y,"-",x), ranking[i+1], "*" * ranking[i+1]))

我可能有一些错误的位置,例如Element列显示不正确。感谢帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

>>> import random
>>> ranking = [0] * 10
>>> for _ in range(100):
...     ranking[(random.randint(1, 100) - 1) // 10] += 1
... 
>>> ranking
[10, 8, 10, 9, 17, 11, 6, 8, 7, 14]

答案 1 :(得分:0)

我遵循了这个算法;

import random

obj="1-10   |  {}"
obj1="11-20  |  {}"
obj2="21-30  |  {}"
obj3="31-40  |  {}"
obj4="41-50  |  {}"
obj5="51-60  |  {}"
obj6="61-70  |  {}"
obj7="71-80  |  {}"
obj8="81-90  |  {}"
obj9="91-100 |  {}"
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10=0,0,0,0,0,0,0,0,0,0



cnt=0
while cnt<100:
    x=random.randint(1,100)
    if 1<=x<=10:
        c1+=1
    elif 10<x<=20:
        c2+=1
    elif 20<x<=30:
        c3+=1
    elif 30<=x<=40:
        c4+=1
    elif 40<x<=50:
        c5+=1
    elif 50<x<=60:
        c6+=1
    elif 60<x<=70:
        c7+=1
    elif 70<x<=80:
        c8+=1
    elif 80<x<=90:
        c9+=1
    elif 90<x<=100:
        c10+=1
    cnt+=1
print (obj.format("*"*c1))
print (obj1.format("*"*c2))
print (obj2.format("*"*c3))
print (obj3.format("*"*c4))
print (obj4.format("*"*c5))
print (obj5.format("*"*c6))
print (obj6.format("*"*c7))
print (obj7.format("*"*c8))
print (obj8.format("*"*c9))
print (obj9.format("*"*c10))

输出是;

>>> 
1-10   |  *****************
11-20  |  ********
21-30  |  *************
31-40  |  **************
41-50  |  ***********
51-60  |  *********
61-70  |  *****
71-80  |  ******
81-90  |  *******
91-100 |  **********
>>> 

仅使用random模块。基本上我计算这些值之间的每个空格。然后我将它们与"*"相乘。之后format()会帮助我将它们放入每个obj变量中。