Python随机数字频率字典

时间:2014-06-23 04:52:49

标签: python dictionary

我试图让函数在愤怒1到6中生成两个随机整数。并且有一个两个整数值之和的频率字典。

用于模拟两次骰子滚动x次。

这是我的代码和我的代码:

def sim():
    dictionary = {}
    loop_value = 0
    total = 0

    while loop_value < 10:
        num_1 = random.randint(1, 6)
        num_2 = random.randint(1, 6)

        total = total + num_1 + num_2

        if value in dictionary:
            dictionary[total] += 1
        else:
            dictionary[total] = 1

        loop_value += 1
        print("Loop value", str(loop_value))
        print(dictionary)

此代码只是添加了所有值。所以没有任何价值是独特的。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

虽然Martins的回答可能会解决您的问题,但您可以使用collections.Counter进行更灵活的计数方法。

这是一个简单的例子:

>>> from collections import Counter
>>> Counter(random.randint(1, 6) + random.randint(1, 6) for x in range(10))
Counter({3: 3, 6: 3, 5: 2, 10: 1, 7: 1})

计数器是字典,因此您可以以相同的方式操作它们。

答案 1 :(得分:0)

替换此

    if value in dictionary:
        dictionary[total] += 1

    if total in dictionary:
        dictionary[total] += 1

我不知道你从哪里获得value(它没有在你的代码中定义),但几乎可以肯定它导致你的else语句不断执行。

答案 2 :(得分:0)

total = total + num_1 + num_2

我认为你不应该在这里添加total,而只是:

total = num_1 + num_2

另请将value替换为total,如其他帖子

中所述
if total in dictionary:
    dictionary[total] += 1
else:
    dictionary[total] = 1

答案 3 :(得分:0)

以下是您的需求:

def sim(loop_value):
    dictionary = {}
    total = 0

    for i in xrange(loop_value): 
        num_1 = random.randint(1, 6)
        num_2 = random.randint(1, 6)

        total += num_1 + num_2

        if total in dictionary:
            dictionary[total] += 1
        else:
            dictionary.setdefault(total, 1)

        total = 0
        print("Loop value", str(loop_value))
        print(dictionary)

>>> sim(5)
>>> ('Loop value', '5')
{4: 1}
('Loop value', '5')
{4: 1, 7: 1}
('Loop value', '5')
{11: 1, 4: 1, 7: 1}
('Loop value', '5')
{8: 1, 11: 1, 4: 1, 7: 1}
('Loop value', '5')
{8: 1, 11: 1, 4: 1, 7: 2}