我试图让函数在愤怒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)
此代码只是添加了所有值。所以没有任何价值是独特的。我该如何解决这个问题?
答案 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}