我的五行石计算代码纰漏在哪?
来源:8-13 划算还是不划算
颜sir
2017-11-25
七月老师,
我看到您给其他人的回复,说算出来是900多,但我的代码算出来最少是1600+,能帮我看看我的代码是哪里出了差错吗?我很想知道我思维上的漏洞,但我又检查不出来。
提前谢谢您了。
以下是我的代码:
# 1:0.75金+8钻 # 1→3:12①石+0.39金+10体 # 3→4:16①石+0.897金+10体,48.78%成功,失败返还体 # 4→6:12④石+19.75金 import random # 引入随机数,方便后面计算概率 gold = diamond = vit = failed_count = stone_1_count = stone_3_count = stone_4_count = 0 # 给金币、钻石、体力、失败次数、一级石头、三级石头和四级石头初始值,方便统计 def buy_1(): # 购买一级石头 global gold, diamond, stone_1_count gold += 0.75 diamond += 8 stone_1_count += 1 # 统计一级石消耗量 def _1to3(): # 合成三级石头 global gold, vit, stone_3_count for i in range(0, 12): buy_1() gold += 0.39 vit += 10 stone_3_count += 1 # 统计三级石消耗量 def _3to4(): # 合成四级石头 global gold, vit, failed_count, stone_4_count if random.random() <= 0.4878: # 如果随机数小于48.78%相当于合成成功 for i in range(0, 16): _1to3() gold += 0.897 vit += 10 else: # 如果大于48.78%就相当于失败 failed_count += 1 # 失败后,失败次数+1 for i in range(0, 16): _1to3() gold += 0.897 _3to4() # 再次合成四级石头 stone_4_count += 1 # 统计四级石消耗量 def _4to6(): # 合成六级石头 global gold for i in range(0, 4): _3to4() gold += 19.75 def cost(): # 把钻石和体力换算成金币,计算最终花费并返回 total_cost = gold + diamond * 0.05 + vit return total_cost def declare(): # 把最终统计打印出来 print("花费金币:"+str(round(gold, 2))) print("花费钻石:"+str(diamond)) print("花费体力:"+str(vit)) print("失败次数:" + str(failed_count)) print("消耗一级石:"+str(stone_1_count)) print("消耗三级石:" + str(stone_3_count)) print("消耗四级石:" + str(stone_4_count)) print("总共花费:"+str(round(cost(), 2))) _4to6() # 运行“合成六级石”的函数 if cost() >= 750: declare() print("不划算,请从玩家处购买。") else: declare() print("划算,自己合成吧。")
其中合成失败两次的运行结果如下:
花费金币:926.57 花费钻石:9216 花费体力:1000 失败次数:2 消耗一级石:1152 消耗三级石:96 消耗四级石:6 总共花费:2387.37 不划算,请从玩家处购买。
就算合成一次都不失败,也是这个结果:
花费金币:624.3 花费钻石:6144 花费体力:680 失败次数:0 消耗一级石:768 消耗三级石:64 消耗四级石:4 总共花费:1611.5 不划算,请从玩家处购买。
写回答
1回答
-
7七月
2017-11-26
这个问题其实还是挺麻烦的,并不是大家想象中那么简单。首先是如何来衡量划算还是不划算。我是以合成一块儿六级五行石的价格来衡量划算还是不划算的。那么这个里面的分歧点在于 这个概念如何计算。其实概念计算比较准确的是要算期望,简单点儿的算的话就是,本来如果不失败消耗的1级五行石是A,但是失败,那么要消耗更多的1及五行石。就是用A 除以这个概率。得到包含失败的总石头数。
10
相似问题