python - 在 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)
解决方案
算法:
- 为结果创建空字典
- 做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 个不同的长度。
推荐阅读
- ruby-on-rails - Puma 在生产环境和开发环境中的日志记录不同
- sql-server - T-SQL:查找字符串中第一个 a-zA-Z 的位置
- compiler-construction - 带有块参数的 SSA 表单的名称
- macos - AppleScript 密钥代码应用程序未运行 (-600)
- r - R组中的列值更改查找日期差异
- python-3.x - 如何将莳萝文件中的熊猫对象转换为更高的熊猫版本?
- javascript - 如何在 nodejs 中实现 Promise?
- julia - 使用 Julia Genie 时出错 - 如何修复 Genie 加载错误?
- multiprocessing - 多重处理
- python - 如何创建一个列来跟踪另一列中的值在熊猫中的该行之前出现的次数