【问题标题】:Is rolling a six sided dice 100 times return the same value as rolling a 100 sided die once? [Python]掷 6 面骰子 100 次与掷 100 面骰子一次返回的值相同吗? [Python]
【发布时间】:2021-10-07 00:44:53
【问题描述】:

所以我在 python 中创建了一个函数,它根据用户输入模拟掷骰子。我有 2 个版本的代码,一个使用循环,一个是纯数学(我不确定它是否正确)。

# Loop
def simulate_dice_loop(num, sides):
    result = 0
    while num > 0:
      x = random.randint(1, sides)
      result += x
      num -= 1
    return result
# Math
def simulate_dice_math(num, sides):
    max = num * sides
    result = random.randint(1, max)
    return result

我非常怀疑数学是否正确,尤其是在较大的数字上。 loop dice roll 倾向于保持在最大值的一半左右。然而,math 往往会一直波动,有时甚至会达到最大值的 90%——这在正常情况下可能极不可能。

...请帮助我如何改进math 一个,因为循环往往需要更长的时间,而且数字越大,也可以满足我对这个主题的好奇心。谢谢^^

【问题讨论】:

  • 我假设你的意思是一个 600 面的模具,但它不一样。 100 个六面骰子可以产生的最小值是 100,但一个 600 面骰子可以产生 1-99 的数字。分布也非常不同。即使在 2 个六面骰子的简单情况下,掷出 2 的概率为 1/36 (1+1),而掷出 7 的概率为 1/6(1+6 或 2+5 或 3+ 4 或 4+3 或 5+2 或 6+1)。
  • 有时,用极限情况进行推理会有所帮助:“掷”六次单面骰子或掷一次六面骰子是否一样?
  • 嗯...我可能应该选择更可靠的循环,只要我在某个时候限制它
  • 我强烈建议不要调用变量max。这已经是python中内置函数的名称。请参阅内置函数列表:docs.python.org/3/library/functions.html 为该列表中的名称分配其他内容可能会产生意想不到的后果。
  • 哦--我将它从 max_roll 重命名为 max 因为它更容易编写......很高兴知道,thx

标签: python function math random dice


【解决方案1】:

因为对于数学一,最大 (num = 100,side = 6) 的机会是 1/600,而对于循环一,它是 (1/6) **100(大约 1.5306467e-78)低很多倍,如果我错了,请纠正我。

为了缩短时间(我假设您正在改进循环之一),您可以使用列表理解(sum([random.randint(1,side) for i in range(num)])

【讨论】:

  • 是的,你是对的。虽然我问这个问题是为了知道数学问题的答案,但要找到如何使用概率来计算分数,我不太确定如何
  • 你可以通过建立一个列表来进一步改进:sum(random.randint(1,side) for i in range(num))。唯一明显的区别是一对[ ],但它避免了构建列表并且效率更高。
  • 哦~在仔细考虑了这段代码是如何工作的之后,我只能对这个新发现的知识表示感谢......谢谢,@Stef!我很确定我会经常使用它
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2020-08-12
  • 2021-12-06
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多