Python 计算2到6个不同骰子的不同结果

Python 计算2到6个不同骰子的不同结果,python,probability,dice,die,Python,Probability,Dice,Die,更新代码 我知道我的编程是垃圾,但我对这个很陌生。对不起,如果这是一个看不见的东西。 我必须计算2个骰子到6个骰子之和的相对频率。到目前为止,我认为我应该得到正确的答案,但打印的结果是不正确的 我不知道真正的问题是什么 请帮忙!谢谢大家! #d2_3 = 2 dices with the sum of 3 d2_2= 0 d2_3, d3_3= 0, 0 d2_4, d3_4, d4_4= 0, 0, 0 d2_5, d3_5, d4_5, d5_5= 0, 0, 0, 0 d2_6, d3

更新代码 我知道我的编程是垃圾,但我对这个很陌生。对不起,如果这是一个看不见的东西。 我必须计算2个骰子到6个骰子之和的相对频率。到目前为止,我认为我应该得到正确的答案,但打印的结果是不正确的

我不知道真正的问题是什么

请帮忙!谢谢大家!

#d2_3 = 2 dices with the sum of 3


d2_2= 0
d2_3, d3_3= 0, 0
d2_4, d3_4, d4_4= 0, 0, 0
d2_5, d3_5, d4_5, d5_5= 0, 0, 0, 0
d2_6, d3_6, d4_6, d5_6, d6_6 = 0, 0, 0, 0, 0
d2_7, d3_7, d4_7, d5_7, d6_7 = 0, 0, 0, 0, 0
d2_8, d3_8, d4_8, d5_8, d6_8 = 0, 0, 0, 0, 0
d2_9, d3_9, d4_9, d5_9, d6_9 = 0, 0, 0, 0, 0
d2_10, d3_10, d4_10, d5_10, d6_10 = 0, 0, 0, 0, 0
d2_11, d3_11, d4_11, d5_11, d6_11 = 0, 0, 0, 0, 0
d2_12, d3_12, d4_12, d5_12, d6_12 = 0, 0, 0, 0, 0
d3_13, d4_13, d5_13, d6_13 = 0, 0, 0, 0
d3_14, d4_14, d5_14, d6_14 = 0, 0, 0, 0
d3_15, d4_15, d5_15, d6_15 = 0, 0, 0, 0
d3_16, d4_16, d5_16, d6_16 = 0, 0, 0, 0
d3_17, d4_17, d5_17, d6_17 = 0, 0, 0, 0
d3_18, d4_18, d5_18, d6_18 = 0, 0, 0, 0
d4_19, d5_19, d6_19 = 0, 0, 0
d4_20, d5_20, d6_20 = 0, 0, 0
d4_21, d5_21, d6_21 = 0, 0, 0
d4_22, d5_22, d6_22 = 0, 0, 0
d4_23, d5_23, d6_23 = 0, 0, 0
d4_24, d5_24, d6_24 = 0, 0, 0
d5_25, d6_25 = 0, 0
d5_26, d6_26 = 0, 0
d5_27, d6_27 = 0, 0
d5_28, d6_28 = 0, 0
d5_29, d6_29 = 0, 0
d5_30, d6_30 = 0, 0
d6_31 = 0
d6_32 = 0
d6_33 = 0
d6_34 = 0
d6_35 = 0
d6_36 = 0

for i in range(0, 100001):

    dice01 = random.randint(1, 6)
    dice02 = random.randint(1, 6)
    dice03 = random.randint(1, 6)
    dice04 = random.randint(1, 6)
    dice05 = random.randint(1, 6)
    dice06 = random.randint(1, 6)

    d2 = dice01 + dice02
    d3 = dice01 + dice02 + dice03
    d4 = dice01 + dice02 + dice03 + dice04
    d5 = dice01 + dice02 + dice03 + dice04 + dice05
    d6 = dice01 + dice02 + dice03 + dice04 + dice05 + dice06


    if [d2] == [2]:
        d2_2 = d2_2 +1
    if [d2, d3] == [3, 3]:
        d2_3, d3_3 = d2_3 +1, d3_3 +1
    if [d2, d3, d4] == [4, 4, 4]:
        d2_4, d3_4, d4_4 = d2_4 +1, d3_4 +1, d4_4 +1
    if [d2, d3, d4, d5] == [5, 5, 5, 5]:
        d2_5, d3_5, d4_5, d5_5 = d2_5 +1, d3_5 +1, d4_5 +1, d5_5 +1
    if [d2, d3, d4, d5, d6] == [6, 6, 6, 6, 6]:
        d2_6, d3_6, d4_6, d5_6, d6_6 = d2_6 +1, d3_6 +1, d4_6 +1, d5_6 +1, d6_6 +1
    if [d2, d3, d4, d5, d6] == [7, 7, 7, 7, 7]:
        d2_7, d3_7, d4_7, d5_7, d6_7 = d2_7 +1, d3_7 +1, d4_7 +1, d5_7 +1, d6_7 +1
    if [d2, d3, d4, d5, d6] == [8, 8, 8, 8, 8]:
        d2_8, d3_8, d4_8, d5_8, d6_8 = d2_8 +1, d3_8 +1, d4_8 +1, d5_8 +1, d6_8 +1
    if [d2, d3, d4, d5, d6] == [9, 9, 9, 9, 9]:
        d2_9, d3_9, d4_9, d5_9, d6_9 = d2_9 +1, d3_9 +1, d4_9 +1, d5_9 +1, d6_9 +1
    if [d2, d3, d4, d5, d6] == [10, 10, 10, 10, 10]:
        d2_10, d3_10, d4_10, d5_10, d6_10 = d2_10 +1, d3_10 +1, d4_10 +1, d5_10 +1, d6_10 +1
    if [d2, d3, d4, d5, d6] == [11, 11, 11, 11, 11]:
        d2_11, d3_11, d4_11, d5_11, d6_11 = d2_11 +1, d3_11 +1, d4_11 +1, d5_11 +1, d6_11 +1
    if [d2, d3, d4, d5, d6] == [12, 12, 12, 12, 12]:
        d2_12, d3_12, d4_12, d5_12, d6_12 = d2_12 +1, d3_12 +1, d4_12 +1, d5_12 +1, d6_12 +1
    if [d3, d4, d5, d6] == [13, 13, 13, 13]:
        d3_13, d4_13, d5_13, d6_13 = d3_13 +1, d4_13 +1, d5_13 +1, d6_13 +1
    if [d3, d4, d5, d6] == [14, 14, 14, 14]:
        d3_14, d4_14, d5_14, d6_14 = d3_14 +1, d4_14 +1, d5_14 +1, d6_14 +1
    if [d3, d4, d5, d6] == [15, 15, 15, 15]:
        d3_15, d4_15, d5_15, d6_15 = d3_15 +1, d4_15 +1, d5_15 +1, d6_15 +1
    if [d3, d4, d5, d6] == [16, 16, 16, 16]:
        d3_16, d4_16, d5_16, d6_16 = d3_16 +1, d4_16 +1, d5_16 +1, d6_16 +1
    if [d3, d4, d5, d6] == [17, 17, 17, 17]:
        d3_17, d4_17, d5_17, d6_17 = d3_17 +1, d4_17 +1, d5_17 +1, d6_17 +1
    if [d3, d4, d5, d6] == [18, 18, 18, 18]:
        d3_18, d4_18, d5_18, d6_18 = d3_18 +1, d4_18 +1, d5_18 +1, d6_18 +1
    if [d4, d5, d6] == [19, 19, 19]:
        d4_19, d5_19, d6_19 = d4_19 +1, d5_19 +1, d6_19 +1
    if [d4, d5, d6] == [20, 20, 20]:
        d4_20, d5_20, d6_20 = d4_20 +1, d5_20 +1, d6_20 +1
    if [d4, d5, d6] == [21, 21, 21]:
        d4_21, d5_21, d6_21 = d4_21 +1, d5_21 +1, d6_21 +1
    if [d4, d5, d6] == [22, 22, 22]:
        d4_22, d5_22, d6_22 = d4_22 +1, d5_22 +1, d6_22 +1
    if [d4, d5, d6] == [23, 23, 23]:
        d4_23, d5_23, d6_23 = d4_23 +1, d5_23 +1, d6_23 +1
    if [d4, d5, d6] == [24, 24, 24]:
        d4_24, d5_24, d6_24 = d4_24 +1, d5_24 +1, d6_24 +1
    if [d5, d6] == [25, 25]:
        d5_25, d6_25 = d5_25 +1, d6_25 +1
    if [d5, d6] == [26, 26]:
        d5_26, d6_26 = d5_26 +1, d6_26 +1
    if [d5, d6] == [27, 27]:
        d5_27, d6_27 = d5_27 +1, d6_27 +1
    if [d5, d6] == [28, 28]:
        d5_28, d6_28 = d5_28 +1, d6_28 +1
    if [d5, d6] == [29, 29]:
        d5_29, d6_29 = d5_29 +1, d6_29 +1
    if [d5, d6] == [30, 30]:
        d5_30, d6_30 = d5_30 +1, d6_30 +1
    if [d6] == [31]:
        d6_31 = d6_31 +1
    if [d6] == [32]:
        d6_32 = d6_32 +1
    if [d6] == [33]:
        d6_33 = d6_33 +1
    if [d6] == [34]:
        d6_34 = d6_34 +1
    if [d6] == [35]:
        d6_35 = d6_35 +1
    if [d6] == [36]:
        d6_36 = d6_36 +1

print("summa_utfall for 2 tärningar:", "2:",d2_2, " 3:",d2_3," 4:", d2_4," 5:", d2_5," 6:", d2_6," 7:", d2_7," 8:", d2_8," 9:", d2_9," 10:", d2_10," 11:", d2_11," 12:", d2_12)
print("summa_utfall for 3 tärningar:", "3:",d3_3, " 4:",d3_4, " 5:",d3_5, " 6:",d3_6, " 7:",d3_7, " 8:",d3_8, " 9:",d3_9, " 10:",d3_10, " 11:",d3_11, " 12:",d3_12, " 13:",d3_13, " 14:",d3_14, " 15:",d3_15, " 16:",d3_16, " 17:",d3_17, " 18:",d3_18)
print("summa_utfall for 4 tärningar:", "4:",d4_4, " 5:", d4_5," 6:", d4_6," 7:", d4_7," 8:", d4_8," 9:", d4_9," 10:", d4_10," 11:", d4_11," 12:", d4_12," 13:", d4_13," 14:", d4_14," 15:", d4_15," 16:", d4_16," 17:", d4_17," 18:", d4_18," 19:", d4_19," 20:", d4_20," 21:", d4_21," 22:", d4_22," 23:", d4_23," 24:", d4_24)
print("summa_utfall for 5 tärningar:", "5:",d5_5, " 6:",d5_6, " 7:",d5_7, " 8:",d5_8, " 9:",d5_9, " 10:",d5_10, " 11:",d5_11, " 12:",d5_12, " 13:",d5_13, " 14:",d5_14, " 15:",d5_15, " 16:",d5_16, " 17:",d5_17, " 18:",d5_18, " 19:",d5_19, " 20:",d5_20, " 21:",d5_21, " 22:",d5_22, " 23:",d5_23, " 24:",d5_24, " 25:",d5_25, " 26:",d5_26, " 27:",d5_27, " 28:",d5_28, " 29:",d5_29, " 30:",d5_30)
print("summa_utfall for 6 tärningar:", "6.",d6_6, " 7:",d6_7, " 8:",d6_8, " 9:",d6_9, " 10:",d6_10, " 11:",d6_11, " 12:",d6_12, " 13:",d6_13, " 14:",d6_14, " 15:",d6_15, " 16:",d6_16, " 17:",d6_17, " 18:",d6_18, " 19:",d6_19, " 20:",d6_20, " 21:",d6_21, " 22:",d6_22, " 23:",d6_23, " 24:",d6_24, " 25:",d6_25, " 26:",d6_26, " 27:",d6_27, " 28:",d6_28, " 29:",d6_29, " 30:",d6_30, " 31:",d6_31, " 32:",d6_32, " 33:",d6_33, " 34:",d6_34, " 35:",d6_35, " 36:",d6_36)



以下是您如何处理2个骰子:

>>> import itertools
>>> list(itertools.product(range(6), range(6)))
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5)]
将第一个和第二个模具的值相加:

>>> outcomes = list(itertools.product(range(6), range(6)))
>>> sums = [a+b for a,b in outcomes]
>>> sums
[0, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 8, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 10]
现在我们可以计算每个结果发生的次数:

>>> from collections import Counter
>>> Counter(sums)
Counter({5: 6, 4: 5, 6: 5, 3: 4, 7: 4, 2: 3, 8: 3, 1: 2, 9: 2, 0: 1, 10: 1})

一些小注意事项:

  • 如果希望掷骰结果在“1..6”范围内而不是(当前)在“0..5”范围内,请将
    range(6)
    替换为
    range(1,7)

  • 对于较高数量的骰子,您可能希望使用
    [结果中VAL的总和(VAL)]计算总和。


  • 这里有一种方法,使用递归,最多掷11个骰子。11似乎是我的计算机在合理时间内给出结果的实际限制

    它计算了15分钟内12个骰子(2176782336个组合)的滚动。根据您可用的计算能力,您可能可以滚动更多

    # recursive function to roll the dice and store 
    # how many times each result is rolled.
    def roll(dice, current_num=0):
        if dice == 0:
            freq[current_num] += 1
            return
        dice -= 1
        for num_rolled in range(1, 7):
            roll(dice, current_num + num_rolled)
    
    
    num_dice = 2
    max_score = num_dice * 6
    combinations = 6 ** num_dice
    
    print(num_dice)
    print(combinations)
    
    # what are all the possible results?
    results = [x for x in range(num_dice, max_score+1)]
    
    # create a dictionary to store frequency count
    freq = dict.fromkeys(results, 0)  
    
    roll(num_dice)
    
    print(freq)  # print out how many time each result could be rolled.
    
    # work out the probability of each score
    for k, f in freq.items():
        print('{}: {:.6%}'.format(k, f / combinations))
    

    如果d2(2个骰子的随机和)等于某个整数-我的If条件将计算d2在100000圈内等于该整数的次数。@AmitaiIrron向下滚动。任何时候你发现自己创建了许多带有数字后缀的类似变量,你可能应该使用一个列表。为什么你要把骰子的总和放在列表中?但是你真的需要想出一个更好的方法来做到这一点,使用循环和列表,而不是几十个不同的变量。您必须学习结构化数据,如列表和字典。