【问题标题】:Count the dice throws to get to file 5 100 times(board is 0-5)数骰子掷出 5 100 次(棋盘为 0-5)
【发布时间】:2021-12-06 18:56:14
【问题描述】:

我正在尝试找出您必须掷骰子多少次才能进入文件 5 100 次(棋盘从 0 到 5 播放)。这就是我尝试的方法(我知道答案是 690,但我不知道我做错了什么)。

from random import *
seed(8)
five = 0
count = 0
add = 0
while five < 100:
    count = count + 1
    print(randint(1,6))
    add = add + randint(1,6)
    if add % 5 == 0 :
        five = five + 1
    else: add = add + randint(1,6)
    print(count)

【问题讨论】:

  • 编辑问题以解释发生了什么?
  • 为什么你认为答案是 690?这是一个随机过程。据统计,平均需要 600 次投掷才能获得 100 个五分。需要考虑的一些问题:您生成的数字介于 1 和 6 之间,而不是介于 0 和 5 之间。另外,请记住,每次调用 randint 都会生成一个新数字。大概,你想做一次r = randint(0,5),然后在循环的其余部分使用那个值。

标签: python dice


【解决方案1】:

这是我认为您正在尝试编写的代码。这确实平均约为 600。您的“答案”是否可能来自 Python 2?随机种子算法很可能不同。

from random import *
seed(8)
five = 0
count = 0
add = 0
while five < 100:
    count += 1
    r = randint(0,5)
    if r == 5:
        five += 1
    else: 
        add += r
print(count, add)

【讨论】:

    【解决方案2】:

    每次你没有得到 5 时,你都在添加第二次掷骰子,这使得概率分布不规则(即提前 7 比任何其他值(例如 1/9)更有可能(1/6) 5) 所以你的结果与计算单次投掷的结果不同。

    顺便说一句,这没有固定的结果,只是在给定的投掷次数附近有更高的概率。但是,鉴于您使用常数为随机数生成器播种,每次运行都应该给出相同的结果。如果你不掷骰子,它应该是正确的。

    以下是到达 690 的流程示例:

    import random
    random.seed(8)
    fiveCount  = 0
    throwCount = 0
    position   = 0
    while fiveCount < 100:
        position = (position + random.randint(1,6)) % 6 
        throwCount += 1
        fiveCount  += position == 5
    
    print(throwCount) # 690
    

    其他观察:

    • 使用模 6 更新位置环绕(从 0 到 5 包含 6 个位置)
    • 您对add%5 == 0 的检查并未反映这一点。它应该是add%6 == 5,但最好将计算建模尽可能接近真实世界的过程(因此将位置保持在 0...5 范围内)

    【讨论】:

      猜你喜欢
      • 2014-10-28
      • 2021-10-07
      • 1970-01-01
      • 2013-03-07
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      相关资源
      最近更新 更多