【发布时间】: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