【发布时间】:2013-12-29 17:47:41
【问题描述】:
我想对以下函数进行 1000 次交互,以确定您在此游戏中是赢钱还是输钱。
该游戏的设计目的是让您掷一对骰子并获得金钱或失去金钱。假设我们从 5 个硬币开始。
投掷 12 会产生 1.5 个硬币。
投掷 11 会产生 1 个硬币。
投出 10 个硬币会产生 0.5 个硬币。
抛出 9,8 或 7 不会产生任何结果。
投掷 6,5,4,3,2 或 1 从您的硬币数量中扣除 0.5 个硬币。
这是我的实现到目前为止的样子:
def luckCalc():
amount = 5
# if 12 then 1/36 chance
if random.randrange(1,7) == 6 and random.randrange(1,7) == 6:
amount = amount + 1.5
# if 11 then 2/36 chance
elif (random.randrange(1,7) == 5 and random.randrange(1,7) == 6) or (random.randrange(1,7) == 6 and random.randrange(1,7) == 5):
amount = amount + 1
# if 10 then 3/36 chance
elif (random.randrange(1,7) == 5 and random.randrange(1,7) == 5) or (random.randrange(1,7) == 4 and random.randrange(1,7) == 6) or (random.randrange(1,7) == 6 and random.randrange(1,7) == 4):
amount = amount + 0.5
# if 9,8,7
# 4/36 + 5/36 + 6/36 chance
# 1+6, 2+5, 3+4, 4+3, 5+2, 6+1 chance
# 2+6, 3+5, 4+4, 5+3, 6+2 chance
# 3+6, 4+5, 5+4, 6+3 chance
# then no change in amount
# if 6,5,4,3,2,1
# chances...
# then amount -0.5
return amount
# Iterate over the dice throwing simulator and calculate total
total = 0.0
for a in range(1000):
total = total + luckCalc()
print (total)
我在函数结束时停止了编码,因为我认识到必须有一个更优雅的解决方案来实现这一点。有什么有趣的建议,我一直听到的这个蒙特卡洛是什么?
【问题讨论】:
-
您当前的例程为每个
if语句“重新掷骰子”。从roll = random.randrange(1,7) + random.rangerange(1,7)开始,然后对其进行测试。您每次通过luckCalc 重置金额,而不是在外部跟踪总数。还有,11是做什么的? -
干得好,你敏锐的眼睛发现了一个逻辑漏洞。 - 我添加了 11。
标签: python probability dice