实现从骰子面数列表生成无顺序可重复的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
相关产品推荐
相关产品推荐

