交作业,同时想请教,如何能精简这部分代码
来源:8-13 划算还是不划算
不知不止不知
2019-02-20
下面是我写的代码
感觉有些地方逻辑好像还是有问题,但是自己不太能想出来了
而且觉得写的有点啰嗦,想请教下怎么能写的更精简。
大体逻辑就是
算出来 需要合成6级石头,的最小消耗,
额外消耗其实就,4级石头失败之后的损失
所以失败次数决定了 是否值得买
1. 先求得 4级石头,失败多少次,价格就会高于市场
2. 求得合成多少次4级石头,会失败一次
3. 经过计算的出结论
4. 同时也可以通过,调整成功率来求得划算与否,看成功率是什么值,会比较划算
给予这个逻辑写出了一下代码
'''
定义一些通用变量
'''
gold = 1 #定义一个gold变量为1的系数
diamond = 0.05*gold #定义一个diamond变量为0.05金的系数
vit = 1*gold #定义一个vit体力变量系数为2金
l6_mark = 750 #定义一个6级石头市场购买的金额
rate_value = 0.4848 #定义一个成功率
'''
1级石头定义
'''
l1_gold = gold*0.75 #1颗1级石头消耗0.75金
l1_diamond = diamond*8 #1颗1级石头还要消耗8颗钻石
l1_stone = l1_gold + l1_diamond #1颗1级石头的金成本
'''
3级石头定义
'''
l3_value = 12*l1_stone #l1到l3需要消耗12颗l1石头
l3_value_gold = 0.39*gold #l1到l3需要消耗0.39金
l3_vit = 10*vit #l3石头需要消耗10体力
l3_stone = l3_value + l3_value_gold + l3_vit #1颗3级石头的金成本
'''
4级石头定义
'''
l4_value = l1_stone*16 #1颗3级石头变成1颗4级石头,需要消耗16个1级石头
l4_value_gold = 0.897*gold #1颗3级石头变成1颗4级石头,需要消耗0.897金
l4_vit = 10*vit #1颗3级石头变成1颗4级石头,需要消耗10vit
l4_rate = rate_value #1颗3级石头变成1颗4级石头,成功率为48.78%并不是100%
#如果失败则金和16颗1级石头也将被扣除,但是不消耗体力
l4_stone_succes = l3_stone + l4_value + l4_value_gold + l4_vit
l4_stone_failed = l4_value_gold + l4_value
'''
6级石头定义
'''
l6_value = 12*l4_stone_succes #1颗1级石头变成6级石头,概率100%,则需要12颗4级石头
l6_gold = 19.75*gold #1颗1级石头变成6级石头消耗19.75金
l6_vit = 10*vit #消耗10体力
l6_stone = l6_value + l6_gold + l6_vit #4级五行石每一次合成,都成功消耗的总金
'''
定义4级五行石,失败多少次就大于市场价格的函数
'''
def times(): #定义一个times的函数
global ts #设置全局变量ts(方便后续比较用,ts=times的缩写)
for ts in range(0,10): #循环11次,这里月可以设置一个参数来控制循环次数
value = l6_stone + l4_stone_failed*ts #value 计算的是 4级五行石合成失败n次后,6级五行石的消耗金额
if value<l6_mark:
pass
else:
return ts #times函数返回ts的值 这里ts的值是次之后 会不划算
break
times() #执行times函数
'''
定义一个 合成多少次 4级五行石 就会失败一次的函数
'''
def failed(): #定义一个filed的函数
global fd #设置一个全局变量fd(方便后续比较实用,fd=failed的缩写)
for fd in range(1,10): #循环30次,来判断多少次之后,成功率会很低 , 也可以设置一个参数来代替10
percent = pow(l4_rate,fd) #设置一个percent的变量,用循环次数做幂次,用4级石头成功率做底,求得多次之后的称功率
if percent > 0.4: #成功率大于 50%的时候 这个0.4可以设置为一个参数
pass
else:
return fd #返回一个fd的值,这个值,代表合成第n次时失败
break #终止循环
failed() #执行failed函数
print('当合成4级合成石概率为' + str(l4_rate) + '计算时') #展示合成4级五行石的成功率
print('每合成第' +str(fd) + '次,4级石,则失败一次') #检测fd值
'''
计算 根据上面的 failed函数求得 4级五行石 必须合成次数,所得到最终的6级五行石的金额
'''
l6_need_l4 = int(l6_stone/l4_stone_succes) #6级五行石 最少需要消耗 多少颗 4级五行石
l4_merge_loop = int(l6_need_l4 / (fd-1)) #4级五行石重复合成 的 次数
final_gold = l4_stone_failed*l4_merge_loop + l6_stone #最终消耗金额
print('结论:')
if final_gold < l6_mark: #比较最终消耗 和 市场购买
print('比商店购买划算')
else:
print('没有商店购买划算')
多谢指导
写回答
1回答
-
我觉得这个题其实很简单,值得讨论的就是3级到4级的时候有失败的概率,那么你需要计算一个期望值,作为最终值,然后和市场购买的价格做比较。就这么简单。
212019-02-20
相似问题