我的五行石计算代码纰漏在哪?

来源: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 除以这个概率。得到包含失败的总石头数。

1
0

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14447 学习 · 4438 问题

查看课程