玩家初始金币数为100
有一面骰子,玩家投掷到2,3,5 点的时候,获得金币数为当前金币数*对应的点数
其余点数,获得金币数为,当前金币数*0.5
若连续两次得到0.5的点数,则投掷结束
设计规则,计算期望
代码如下
import numpy as np #导入包名
import matplotlib.pyplot as plt
win_time=np.array([2,3,5,0.5])#各个奖励
ls_gold=[]
best_gold=[]
for j in range(5):
#单次游戏
i=0
d=0.1
score=[]
win_gold=100
gold_record=[]
while True:
x = (1 - d)*0.5 #(*2点*)
b = (1 - d)*0.3 #(*3点*)
c = (1 - d)*0.2 #(*5点*)
score.append(np.random.choice(a=win_time, size=1, replace=True, p=[x, b, c ,d]))#注意不要使用Append=()
win_gold=win_gold*float(score[i])#获得奖金数等于上次奖金*本次奖励倍数
gold_record.append(win_gold)#用来记录投掷次数不同时获得奖金数,寻找最佳停止时间
if i>0 and score[i-1]==score[i] and score[i]==0.5:#break条件,注意此条件在所有条件之前
ls_gold.append(win_gold)#子循环中的最终结果要在break前进行记录
best_gold.append(max(gold_record))
break#break终止的是if从属的上层循环,因为break终止后剩下语句都将不再执行,所以结果要在break前记录
elif score[i]!=0.5:#d增加的条件
d=d+0.1
else:
d=d
i=i+1#计数器在所有条件走完之后增加步长
print(ls_gold)
plt.hist(ls_gold)
#plt.hist(best_gold)
plt.show()
来源:https://www.cnblogs.com/yuvejxke/p/12016051.html