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

实现从骰子面数列表生成无顺序可重复的n元素唯一组合

多面骰子组合生成实现方案

你需要的是可重复组合逻辑,该逻辑天然满足「顺序不同视为同一组合、允许选取重复元素」的要求,且可直接指定选取骰子的个数,完美适配后续扩展n个骰子的需求。Python标准库itertools内置了该功能的实现,可直接调用。

完整代码实现

from itertools import combinations_with_replacement

# 可用骰子面数常量
ALLOWED_DICE_SIDES = [4, 6, 8, 10, 12, 20]

def generate_dice_combinations(dice_count: int) -> list[tuple[int, ...]]:
    if dice_count < 1:
        raise ValueError("骰子个数必须≥1")
    # 可重复组合:不区分元素顺序、允许重复选取同一元素、支持任意选取个数
    return list(combinations_with_replacement(ALLOWED_DICE_SIDES, dice_count))

调用示例

当前需求(2个骰子组合)

# 生成2个骰子的所有不重复组合
two_dice_combs = generate_dice_combinations(2)
print(two_dice_combs)

输出结果包含(4,4)、(4,6)、(4,8)...(20,20),不会出现(6,4)这类逆序重复项,完全符合要求。

扩展场景(n个骰子组合)

需要生成任意个数骰子的组合时,直接修改入参即可:

# 生成3个骰子的所有不重复组合
three_dice_combs = generate_dice_combinations(3)
# 生成5个骰子的所有不重复组合
five_dice_combs = generate_dice_combinations(5)

对于5d4、2d20这类多同面数骰子的场景,可直接对生成的组合统计各面数出现次数,转换为对应格式即可。


内容的提问来源于stack exchange,提问作者Opti_byte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:57:04