【问题标题】:Theoretical Probability of Rolling N Dice in PythonPython中掷N个骰子的理论概率
【发布时间】:2021-02-14 03:52:10
【问题描述】:

我正在尝试绘制一个在 python 中滚动 N 骰子的理想情况以将其与实验值进行比较,我能够创建骰子将产生的各种组合的数量,但我无法将元组相加来计算例如,有多少掷骰会导致数字 7 或 8 生成正态分布(例如,当掷两个骰子时,7 比 2 更有可能的结果)

from itertools import product
t = [list(range(1,7)) for x in range(2)]
r = list(product(*t))
print(r)

这段代码将打印 [(1,1),(1,2),(2,1),(2,2).....] 我需要的是它打印总和 [2, 3,3,4.....]

有什么想法吗?

谢谢!

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以在定义r 时将它们汇总到列表推导中,而不是简单地构建list

    from itertools import product
    t = [list(range(1,7)) for x in range(2)]
    r = [sum(pair) for pair in product(*t)]
    # r = [2, 3, 4, 5, ...]
    

    这为您提供了一个与您请求的有点不相符的数组。 r 的元素为[(1+1), (1+2), ..., (1+6), (2+1), ...],但您可以根据需要对其进行排序:

    r.sort()
    # r = [2, 3, 3, 4, ...]
    

    但是itertools 有一些更有用的迭代器可以在这里为您提供帮助。可能值得研究的是permutations,当它与内置的map 函数结合使用时,可以更简洁地构建列表:

    from itertools import permutations
    t = permutations(range(1, 7), 2) # iterate through all permutations of 2 elements from the list [1,2,3,4,5,6]
    r = list(map(sum, t)) # map the sum function to each permutation
    

    或者,作为单行:

    r = list(map(sum, permutations(range(1, 7), 2)))
    

    【讨论】:

    • 哇,好多了!
    【解决方案2】:

    你可以试试这样的

    list1, list2 = [], []
    
    for i in range(1, 7):
        for j in range(1, 7):
            list1.append((i, j))
            list2.append(i + j)
    
    

    它产生以下输出

    >>> list1
    [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]
    
    >>> list2
    [2, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 8, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 11, 7, 8, 9, 10, 11, 12]
    

    list2 的索引i 是list1 的索引i 处的元组中数字的总和

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多