首页 > 解决方案 > 在 Python 中掷骰子

问题描述

我需要找到我需要掷一个公平骰子的 100 次的期望值,直到我得到所有六个数字

这是我的代码。我不知道如何将其放入 while 循环 100 次。任何人都可以帮忙吗?

例如:我第一次掷出所有六个数字时,我需要掷出 8 次。我第二次掷出所有六个数字,我掷了 13 次 然后我记录如下: 1:8 2:13 ... 100:9

我想要我的 a=[8,13,.....,9]

import random
trials = []
a=[]
collection = [random.randint(1,6) for x in range(6)]
for c in collection:
    if c not in a:
        a.append(c)
    
    else:
        collection.append(random.randint(1,6))
trials.append(len(collection))

print(a)
print(collection)
print(trials)

标签: python

解决方案


算法:

  • 为结果创建空字典
  • 做100次
    • 创建一组数字 1-6
    • 创建此尝试绘制数字的空列表
    • 虽然集合中仍有数字重复:
      • 画一个数字并将其添加到您的列表中
      • 如果在其中,则从集合中删除数字
    • 将列表添加到字典
  • 评估东西

或在代码中:

import random

results = {}

for t in range(100):
    nums = set((1,2,3,4,5,6))
    data = []
    # do as long as we still lack one number
    while nums:
        n = random.randint(1,6)
        data.append(n)
        # remove if in, else we dont care
        if n in nums:
            nums.remove(n)
    # add the list to your results - if you just need the lenghts don't
    # store the whole list here, just store its lenghts and adapt the 
    # evaluation code
    results[t] = data

# evaluation
lengths = [len(w) for w in results.values()]

average_lengths = sum(l for l in lengths) / 100
max_lengths = max(lengths)
min_lengths = min(lengths)

# output
print(min_lengths, average_lengths, max_lengths)

输出:

6 13.95 31 

您可以打印字典results以查看所有掷骰子。
您可以打印列表lenghts以查看所有 100 个不同的长度。


推荐阅读