Python:掷骰子12次,计算每个数字相等出现两次的概率

问题描述 投票:0回答:1

我为标题问题起草了以下代码,但返回结果始终为0。请问有人可以帮助我找出这里的问题吗?

非常感谢!

import random
dice_sides = 6
frequency_list = []
def roll_dice(times):
    results = []
    for roll_num in range(times):
        result = random.randint(1,dice_sides)
        results.append(result)
    for i in range(dice_sides):
        if results.count(i) != 2:
            frequency = 0
            break
        else:
            frequency = 1
    return frequency
def occurrence(N,times):
    for j in range(N):
        frequency_list.append(roll_dice(times))
    prob = frequency_list.count(1)
    return prob

print(occurrence(10000,12))
python-3.x probability dice
1个回答
1
投票

您可以尝试这样的事情

代码

import random
from collections import Counter



def roll_dice(n_sides, times):
    if n_sides % times:
        return 0

    results = []
    for roll_num in range(times):
        result = random.randint(1, n_sides)
        results.append(result)

    # I'm using set here and will check its length,
    # Counter(results) returns a dict of items (item, count)
    # and if every item has the same count it should have length 1. 
    # More generic statement not only for (2 in this case)
    res_dict = set(Counter(results).values())

    if len(res_dict) == 1:
        return 1
    return 0


def mean(ar):
    return sum(ar)/len(ar)


def occurrence(N, n_sides, times):
    frequency_list = []
    for j in range(N):
        frequency_list.append(roll_dice(n_sides, times))
    prob = mean(frequency_list)
    return prob


if __name__ == '__main__':
    N = 100000 # I intentionally made it 100k 
    n_sides = 6
    times = 12

    res_prob = occurrence(N, times)
    print(res_prob)

输出

0.00604
[Finished in 3.6s]
© www.soinside.com 2019 - 2024. All rights reserved.