我想通過以下函數進行1000次交互,以確定您是否在此遊戲中獲勝或放棄了金錢。概率骰子Python中的兩個骰子游戲
遊戲的設計是這樣的,你扔一對骰子,並拿回錢或寬鬆的錢。假設我們從5個硬幣開始。
投擲收益率1.5硬幣。
投擲收益率硬幣。
投擲收益率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做什麼? – jonrsharpe
幹得好,你敏銳的眼睛發現了一個邏輯漏洞。 - 我添加了11. – nottinhill