You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:random.randint与random.choice掷骰子结果差异原因问询

为什么用random.randint(1,6)的学生直方图里12点频率异常高?

嘿,这个问题很有意思——其实锅不在random.randint(1,6)本身,大概率是学生写代码时犯了一个很容易忽略的逻辑错误:重复使用同一个随机数代表两个骰子的结果。

让我拆解一下:

首先,正确的逻辑应该是怎样的?

不管用randint还是choice,两个骰子的结果必须是独立生成的。比如:

# 用randint的正确写法
import random
rolls = []
for _ in range(100):
    die1 = random.randint(1,6)
    die2 = random.randint(1,6)
    rolls.append(die1 + die2)
# 用choice的正确写法
import random
rolls = []
for _ in range(100):
    die1 = random.choice([1,2,3,4,5,6])
    die2 = random.choice([1,2,3,4,5,6])
    rolls.append(die1 + die2)

这两种写法生成的结果分布是完全一致的,都符合两个6面骰子的概率规律(和为7的概率最高,12的概率最低)。

那错误出在哪?

如果学生图省事,只生成一次随机数就加两次,比如:

# 错误示例!千万别这么写
import random
rolls = []
for _ in range(100):
    die = random.randint(1,6)
    rolls.append(die + die)  # 两个骰子是同一个值!

这种情况下,两个骰子的结果完全绑定:当die=6时,和就是12,这个事件的概率是1/6(而正常两个独立骰子和为12的概率只有1/36),自然直方图里12点的频率会异常偏高。而且你仔细看的话,这类错误代码生成的和只能是偶数(2、4、6、8、10、12),其他奇数和根本不会出现。

为什么用random.choice的学生没踩这个坑?

可能是choice的调用形式更“约束”人——你每次都得写random.choice([1,2,3,4,5,6]),很难下意识地复用同一个变量;而randint(1,6)写法太简洁,容易让学生偷懒,不小心把同一个随机数变量加了两次。

总结一下:random.randint(1,6)和random.choice([1,2,3,4,5,6])在生成单骰子结果上是完全等价的,都是均匀分布。问题出在学生的代码逻辑,而非函数本身。

内容的提问来源于stack exchange,提问作者N. Duncan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:08:04