玩家初始金币数为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()