日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现大富翁_Python3 欧拉计划 问题84 大富翁

發布時間:2023/12/14 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现大富翁_Python3 欧拉计划 问题84 大富翁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EulerProject.png

更多問題參見:https://www.jianshu.com/p/8c3ec805433d

84、大富翁

大富翁的標準棋盤大致如下圖所示:

Monopoly.png

從標記有GO的方格出發,擲兩個6面的骰子,并將所得的點數之和,作為本輪前進的步數。如果不附加其它規則,玩家玩過很多輪以后,落在每一格上的概率應該都接近2.5%。但是,由于G2J(入獄)、CC(寶箱卡)和CH(機會卡)的存在,這個概率分布會有所改變。

除了落在G2J上,或者在CC或CH上有可能抽到入獄卡之外,如果玩家連續3次都擲出兩個一樣的點數,例如玩家連續三次擲出的分別是(3,3),(1,1),(5,5),則在第三次時不會前進5+5=10步,而是直接入獄。

游戲開始時,CC和CH中的牌將被隨機打亂。當一個玩家落在CC或CH上時,他們從CC和CH卡中的最上方取一張牌并按照牌面意思前進,并將該牌再放回牌堆的最下方。寶箱卡和機會卡都各有16張牌,因為我們只關心會影響到移動的牌,其它牌無效。寶箱卡和機會卡的牌見下面:

寶箱卡 (2張牌,其他14張無效):

回到起點GO

進入監獄JAIL

機會卡 (10張牌,其他6張無效):

回到起點GO

進入監獄JAIL

移動到C1

移動到E3

移動到H2

移動到R1

移動到下一個R(鐵路公司)

移動到下一個R

移動到下一個U(公共服務公司)

后退三步

這道題主要考察停在某個特定方格上的概率。顯然,除了停在G2J上的可能性為0之外,停在CH格的可能性最小,因為有5/8的概率玩家會移動到另一格。這里不區分是被送進監獄還是恰好落在監獄,而且不考慮需要擲出兩個相同的點數才能出獄的要求,而是假定進入監獄的第2輪就會自動出獄。

從起點GO開始,將方格依次標記00至39,我們可以將這些兩位數連接起來表示方格的序列。

統計學上來說,3個停下概率最大的方格分別是:

JAIL(6.24%):方格10

E3(3.18%):方格24

GO(3.09%):方格00。

這三個方格可以用一個6位數字串表示為:102400

上面的可能性是在用兩個6面骰子的情況下得到的,現在改用兩個4面的骰子,求出3個停下概率最大的方格構成的6位數字串。

Python3解答

import numpy as np

import random

#計算隨機數

def Comnum(num, count):#計算幾個幾面色子的隨機數

numlist = []

st = 0

while st < count:

numlist.append(random.randint(1, num))

st += 1

return numlist

#CH卡

chlist = list(np.array([0, 10, 11, 24, 39, 5, 99, 99, 999, 9999] +[99999] * 6)[random.sample(range(16), 16)])#99999代表無效牌,隨即洗牌

chdict ={7: [15, 12], 22: [25, 28], 36: [5, 12]}

#CC卡

bxlist = list(np.array([0, 10] +[99999] * 14)[random.sample(range(16), 16)])#99999代表無效牌,隨即洗牌

bxdict = [2, 17, 33]

#定義取卡放卡后的函數

def Card(exlist):

return exlist[1:] + [exlist[0]]#取完牌,將牌放在最下面

#計數字典

countdict = {kk : 0 for kk in range(40)}#每個數字代表一個方格

#開始模擬

start = 0

jailsign = 0

monitimes = 10000#模擬的次數

for moni in range(monitimes):

#開始隨機數

randomlist = Comnum(4, 2)#計算2個4面色子的隨機數

sezi = sum(randomlist)#計算前進的步數

if randomlist[0] == randomlist[1]:

jailsign += 1

else:

jailsign = 0

if jailsign >= 3:#連續三次擲出相同的點數

countdict[10] += 1#JAIL

start = 10

else:

busu = (sezi + start) % 40

if busu == 30:#G2J

countdict[10] += 1#JAIL

start = 10

else:

if busu in bxdict:#CC card

if bxlist[0] == 99999:#Stop Moving

countdict[busu] += 1

start = busu

else:

countdict[bxlist[0]] += 1

start = bxlist[0]

bxlist = Card(bxlist).copy()

elif busu in chdict:#CH card

if chlist[0] == 99:#next R

nnum = chdict[busu][0]

elif chlist[0] == 999:#next U

nnum = chdict[busu][1]

elif chlist[0] == 99999:#Stop Moving

nnum = busu

elif chlist[0] == 9999:#Backward 3

nnum = busu - 3

if nnum == 33:#CC card

if bxlist[0] != 99999: # Stop Moving

nnum = bxlist[0]

bxlist = Card(bxlist).copy()

else:

nnum = chlist[0]

countdict[nnum] += 1

start = nnum

chlist = Card(chlist).copy()

else:

countdict[busu] += 1

start = busu

#選擇前n個最大的值,并且輸出字符串

def Str(exdict, N, M):

sdict = sorted(exdict.items(), key = lambda x: x[1], reverse = True)

ncount = 0

strkey = ''

while ncount < N:

item = sdict[ncount]

if len(str(item[0])) < 2:

strkey += '0%s'%item[0]

print('0%s :%.4f%%\n'%(item[0], exdict[item[0]] / M * 100))

else:

strkey += '%s' % item[0]

print('%s :%.4f%%' % (item[0], exdict[item[0]] / M * 100))

ncount += 1

return strkey

print('模擬完畢后,每個方格的停留次數:%s'%countdict)

print(Str(countdict, 3, monitimes))

答案:

模擬完畢后,每個方格的停留次數:{0: 276, 1: 185, 2: 148, 3: 201, 4: 217, 5: 275, 6: 208, 7: 80, 8: 198, 9: 218, 10: 762, 11: 212, 12: 250, 13: 246, 14: 302, 15: 380, 16: 309, 17: 287, 18: 293, 19: 289, 20: 308, 21: 301, 22: 113, 23: 280, 24: 356, 25: 304, 26: 256, 27: 258, 28: 281, 29: 296, 30: 0, 31: 293, 32: 225, 33: 225, 34: 248, 35: 181, 36: 75, 37: 197, 38: 216, 39: 251}

#3個停下概率最大的方格:

10 :7.6200%

15 :3.8000%

24 :3.5600%

#6位數字串:

101524

總結

以上是生活随笔為你收集整理的python实现大富翁_Python3 欧拉计划 问题84 大富翁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。