Python-每10个区域绘制一个直方图
我必须设计并实现一个应用程序,创建100个1到100范围内的随机正整数,然后创建一个图表,显示这些值出现的频率。它显示了有多少值落在1到10、11到12的范围内,依此类推。它将为输入的每个值打印一个星号 顺便说一下: 如果没有声明,我们必须使用列表 图表应如下图所示Python-每10个区域绘制一个直方图,python,python-3.x,Python,Python 3.x,我必须设计并实现一个应用程序,创建100个1到100范围内的随机正整数,然后创建一个图表,显示这些值出现的频率。它显示了有多少值落在1到10、11到12的范围内,依此类推。它将为输入的每个值打印一个星号 顺便说一下: 如果没有声明,我们必须使用列表 图表应如下图所示 1 - 10 | **** 11 - 20 | ** 21 - 30 | **************** 31 - 40 | 41 - 50 | *** 51
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]))
我可能有一些错误的点,例如元素列显示不正确。谢谢你的帮助。谢谢大家! 我遵循这个算法
>>> 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]
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))
仅用于随机模块。基本上,我计算每个值之间的空间。然后我将它们乘以*。然后格式化帮助,我将它们放入每个obj变量。请不要使用if/elif语句。
>>>
1-10 | *****************
11-20 | ********
21-30 | *************
31-40 | **************
41-50 | ***********
51-60 | *********
61-70 | *****
71-80 | ******
81-90 | *******
91-100 | **********
>>>