【问题标题】:Calculate all the possible sums of rolling x die with y sides计算 y 边滚动 x 骰子的所有可能总和
【发布时间】:2020-10-07 05:02:24
【问题描述】:

我正在编写一个函数来帮助我计算将可变数量的骰子与可变面数相加的可能结果(例如,两个六面骰子和一个四面骰子的总和)并且我已经被难住了一段时间。

例如,滚动两个三面骰子应该输出一个包含所有 9 种可能组合的数组:

[[1,1],
 [1,2], 
 [1,3],
 [2,1],
 (etc.)
 [3,2],
 [3,3]]

我也搞不清楚。我已经设法生成要枚举的范围,但我做不到。

dice = [6,6]
diceRanges = [range(0, die) for die in dice]
diceIndex = [0 for die in dice]

outcomes = []

for idx, rng in enumerate(diceRanges):
    for var in rng:
        diceIndex[idx] = var
        outcomes.append([val for val in diceIndex])
        
outcomes

我见过一些事情,但从来没有看起来那么简单。

干杯

【问题讨论】:

  • 从理论上讲,我希望创建一个 n 维数组,其中包含每个维度的索引值的总和。

标签: python arrays numpy


【解决方案1】:

如果你使用itertools就很简单:

import itertools

outcomes = list(itertools.product(*diceRanges))

【讨论】:

  • 哇。我无语了。非常感谢!
【解决方案2】:

仅使用 numpy

dice_sides = 6
dices_values = np.arange(1,dice_sides+1)
outcome =  np.dstack(np.meshgrid(dices_values, dices_values)).reshape(-1,2)

Out[313]:
array([[1, 1],
       [2, 1],
       [3, 1],
       [4, 1],
       [5, 1],
       [6, 1],
       [1, 2],
       [2, 2],
       [3, 2],
       [4, 2],
       [5, 2],
       [6, 2],
       [1, 3],
       [2, 3],
       [3, 3],
       [4, 3],
       [5, 3],
       [6, 3],
       [1, 4],
       [2, 4],
       [3, 4],
       [4, 4],
       [5, 4],
       [6, 4],
       [1, 5],
       [2, 5],
       [3, 5],
       [4, 5],
       [5, 5],
       [6, 5],
       [1, 6],
       [2, 6],
       [3, 6],
       [4, 6],
       [5, 6],
       [6, 6]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多