Menu
CoddyTech

骰子点数之和

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 15 课,共 64 课。

掷两个骰子并把点数相加:掷出 7 的次数是掷出 2 的六倍。数一数点数组合:

一个 6×6 的网格,显示两个骰子点数之和,第一个骰子从上到下排列,第二个骰子从左到右排列。得到 7 的六个格子沿对角线排列,并以阴影标出;只有一个格子能得到 2

模拟结果也一致。把两次掷骰子的结果相加,然后统计每个总和出现的次数;value_counts 会按出现次数从多到少排列:

rng = np.random.default_rng(2)
first = rng.integers(1, 7, size=3600)
second = rng.integers(1, 7, size=3600)
counts = pd.Series(first + second).value_counts()
print(counts.head(3))

这会打印:

7    605
6    522
8    443
Name: count, dtype: int64

ax.bar(counts.index, counts) 会画出整座帐篷:

两颗骰子掷出 3600 次的柱状图:总和为 2 时,柱子高度约为 100;在 7 时达到约 600 的峰值;随后逐渐下降,到 12 时约为 100

像这样的柱状图能让你初步了解任何标签:其中少见的值,模型几乎无法从中学到东西。

challenge icon

挑战

中等

在角色扮演游戏中,伤害是两个四面骰点数的总和,每个骰子的点数为 1 到 4。程序会读取攻击次数,起始代码会将掷骰结果存入 first 和 second,并为图表添加标签。

  1. 统计每种伤害总和出现的次数。
  2. 打印最可能出现的伤害值及其占攻击次数的比例,保留 3 位小数。
  3. 用柱形图绘制每种总和的次数,并显示图表。

进行 16 次攻击时,样本太少,结果不太可靠:

Most likely damage: 6, share 0.312

标题为 Damage Rolls 的柱形图,展示 16 次攻击的结果:3、5、6、7 和 8 处有柱子,其中 6 处最高,共掷出 5 次

然后 Coddy 会描述你的图表。攻击次数越多,峰值就越稳定。

亲手试试

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rolls = int(input())

# 不要修改下面的代码行
rng = np.random.default_rng(4)
first = rng.integers(1, 5, size=rolls)
second = rng.integers(1, 5, size=rolls)

fig, ax = plt.subplots()
ax.set_title("Damage Rolls")
ax.set_xlabel("Damage")
ax.set_ylabel("Rolls")

# 在下面编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

机器学习统计学中的所有课

自己练习: Python 在线编译器