刚学python,感觉写得没问题,一直不成功
y轴刻度对不上,数据也对不上
from random import randint
from plotly.graph_objs import Bar,Layout
from plotly import offline
class Die:
'''创建一个骰子的类'''
def __init__(self,sides=6):
'''初始设置,默认骰子为6面'''
self.sides = sides
self.results = []
self.frequencies = []
def roll(self,num=1):
'''掷骰子,默认一次'''
self.num = num
for i in range(0,num):
self.results.append(randint(1,self.sides))
def analyse_frequency(self):
'''分析每个点数的频率'''
for value in range(1,self.sides+1):
frequency = self.results.count(value)
self.frequencies.append(frequency)
def ans_visable(self):
'''数据可视化'''
x_values = list(range(1,self.sides+1))
#Bar不能直接接受range的结果,需使用list()
data = [Bar(x=x_values,y=self.frequencies)]
#配置图表
x_axis_config = {'title' : '结果'}
y_axis_config = {'title' : '结果的频率'}
#反回指定图表和配置的对象
my_layout = Layout(title=f'掷骰子{self.num}结果',xaxis=x_axis_config,yaxis=y_axis_config)
#离线作图
offline.plot({'data':data,'layout':my_layout} ,filename='d6.html')
if __name__ == '__main__':
die_1 = Die()
die_2 = Die()
die_1.roll(1000)
die_2.roll(1000)
results = []
frequencies = []
#计算结果
for num in range(0,1000):
result = die_1.results[num] + die_2.results[num]
results.append(result)
# 统计结果
for value in range(2,die_1.sides+die_2.sides+1):
frequency = results.count(value)
frequencies.append(frequency)
#可视化
x_values = list(range(2,die_1.sides+die_2.sides+1))
data = [Bar(x=x_values,y=frequencies)]
#配置图表
x_axis_config = {'title' : '结果'}
y_axis_config = {'title' : '结果的频率'}
#反回指定图表和配置的对象
my_layout = Layout(title='掷骰子的结果',xaxis=x_axis_config,yaxis=y_axis_config)
#离线作图
offline.plot({'data':data,'layout':my_layout} ,filename='ans.html')
求解答