在学习《python 编程从入门到实践》中,15.4章节中,跟着书上的代码敲得,但出现了错误:
代码如下:
from plotly.graph_objs import Bar, Layout
from plotly import offline
from die import Die
die = Die()
results = []
for roll_num in range(1000):
result = die.roll()
results.append(result)
frequencies = []
for value in range(1, die.num_sides+1):
frequency = results.count(value)
frequencies.append(frequency)
x_values = list(range(1, die.num_sides+1))
data = [Bar(x=x_values, y=frequencies)]
x_axis_config = {'title': '结果'}
y_axis_config = {'title': '结果的频率'}
my_layout = Layout(title='掷一个D6 1000次的结果',
xaxis=x_axis_config, yaxis=y_axis_config)
fig = {'data': data, 'Layout': my_layout}
offline.plot(fig, filename='d6.html')
运行结果及报错内容
TypeError: invalid Figure property: Layout
Layout
Bad property path:
Layout
网上找不到相关解答
请各位帮忙
fig = {'data': data, 'layout': my_layout}。可参考:https://blog.csdn.net/weixin_46329748/article/details/117170740
import random
from plotly.graph_objs import Bar, Layout
from plotly import offline
class Die:
"""表示一个骰子的类"""
def __init__(self, num_sides):
"""骰子默认为6面"""
self.num_sides = num_sides
def roll(self):
"""返回一个1和骰子面数之间的随机整数"""
return random.randint(1, self.num_sides)
if __name__ == "__main__":
# 创建一个Die
die = Die(6)
print(die)
print(die.num_sides)
# 掷几次筛子并将结果存储在一个列表中
results = []
for roll_num in range(1000):
result = die.roll()
results.append(result)
print(results)
# 分析结果
frequencies = []
for value in range(1, die.num_sides + 1):
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
# 对结果进行可视化
x_values = list(range(1, die.num_sides + 1))
data = [Bar(x=x_values, y=frequencies)]
x_axis_config = {'title': '结果'}
y_axis_config = {'title': '结果的频率'}
my_layout = Layout(title='掷一个1000次的结果',
xaxis=x_axis_config, yaxis=y_axis_config)
fig = {'data': data, 'layout': my_layout}
offline.plot(fig, filename='d6.html')
问题已解决,感谢老哥。我的问题主要出在fig = {'data': data, 'Layout': my_layout}这一句上,‘Layout’应该小写‘layout’,其实这点在当时看到错误时,应该仔细检查一下的,当时一直以为是代码问题和安装包问题。这点在被老哥指出来后,豁然明白,同时也为花那么多时间检查不出一个大小写而懊恼,可能这是每个小白必经之痛。最后,感谢老哥的解答,也鼓励自己继续加油。