最近一周学了python,正好崩坏三出来后崩坏鸭的精准池子,利用列表,字典,随机数匹配范围,简单模拟一下抽卡

本次UP武器:
重炮:蓝焰银隼0019   2.479%

双枪:空无之钥       0.413%

太刀:天殛之钥       0.413%

大剑:天鹅湖         0.413%

拳套:无存之钥       0.413%

镰刀:血渊之眸       0.413%

骑枪:永寂之赫勒尔   0.413%

[4★圣痕]

真理之翼套装:布洛妮娅.次生银翼(上、中、下)   1.240%

神圣诗篇套装:但丁(上、中、下)               0.310%

适格者套装:哥伦布(上、中、下)               0.310%

雾都神探套装:福尔摩斯(上、中、下)           0.310%

冰之律者套装:安娜.沙尼亚特(上、中、下)      0.310%

3★武器:23个都是 0.488%

3星圣痕:12套概率都是0.936%

4★相转移镜面      6.828%

3★超小型反应炉    10.242%

4星双子灵魂结晶     8.536%

3星灵魂结晶    8.536%

4星吼咪宝藏    1.707%

4星吼美宝藏    2.561%

3星吼里宝藏     4.267%

为了方便计算,把三星材料都放在一块算,把4星材料都放在一块算

整个代码的流程,首先把四星武器,四星圣痕,三星武器,三星圣痕,三星材料,四星材料用列表分开来存储

再用一个字典存储上面的数据,用列名做key,value就是一整个列表的数据

还要把四星武器和四星圣痕单独再存储一下,再把up圣痕,up武器,非up圣痕,非up武器拿到一块计算他们的概率,再做一个和上面相同操作的字典,为我们做保底机制给必定四星的时候用

每次抽卡,抽卡次数cardcount加一,将这个卡放进一个临时列表中,

判断抽到的是不是4星的,如果是将标签flag改为true说明出了货,不用进保底机制了,直接把临时列表内容写到最终返回的列表cardlist中

如果一次10连没4星,进保底机制,将你临时列表中一个元素删除,从4星装备中拿一个进去

把临时列表的内容写进最终要返回的结果列表cardlist中

还有针对一次抽卡小于10次的,直接写进最终列表

最后一种情况针对抽卡是12,23,34.这种有十连,最后一趟不够十连的,我套了2层判断 ,为了和前面的情况区分开

import random
from honkaicard import matchfun
m=input("请输入抽卡次数:")
n=int(m)
#4星武器
arms4=['重炮:蓝焰银隼0019','双枪:空无之钥','太刀:天殛之钥','大剑:天鹅湖','拳套:无存之钥','镰刀:血渊之眸','骑枪:永寂之赫勒尔']
#4星圣痕
stigma4=['真理之翼套装:布洛妮娅.次生银翼(上)','真理之翼套装:布洛妮娅.次生银翼(中)','真理之翼套装:布洛妮娅.次生银翼(下)','神圣诗篇套装:但丁(上) ','神圣诗篇套装:但丁(中) ','神圣诗篇套装:但丁(下)','适格者套装:哥伦布(上)','适格者套装:哥伦布(中)','适格者套装:哥伦布(下)','雾都神探套装:福尔摩斯(上)','雾都神探套装:福尔摩斯(中)','雾都神探套装:福尔摩斯(下)','冰之律者套装:安娜.沙尼亚特(上)','冰之律者套装:安娜.沙尼亚特(中)','冰之律者套装:安娜.沙尼亚特(下) ']
#3星武器
arms3=['3星武器(23种)']
#3星圣痕
stigma3=['3星圣痕(12套中上中下任意一件)']
#3星材料
material3=['超小型反应炉','3星吼里宝藏','超小型反应炉']
#4星材料
material4=['相转移镜面','吼咪宝藏 ','吼美宝藏','双子灵魂结晶']
dict_card={}
dict_card.update({'arms4':arms4})
dict_card.update({'arms3':arms3})
dict_card.update({'stigma4':stigma4})
dict_card.update(({'stigma3':stigma3}))
dict_card.update({'material3':material3})
dict_card.update({'material4':material4})
#print(dict_card)#单抽一次的装备概率
CardprobabilityDict={'arms4':(0,4.96),'stigma4':(4.96,12.397),'arms3':(12.397,23.621),'stigma3':(23.621,57.317),'material3':(57.317,80.362),'material4':(80.362,101)
}#四星装备中的概率
star4poolprobability={'up_arms':(0,19.997),'not_up_arms':(19.997,39.994),'not_up_stigma':(39.994,69.997),'up_stigma':(69.997,101)
}
up_arms=['重炮:蓝焰银隼0019']
not_up_arms=['双枪:空无之钥','太刀:天殛之钥','大剑:天鹅湖','拳套:无存之钥','镰刀:血渊之眸','骑枪:永寂之赫勒尔']
not_up_stigma=['神圣诗篇套装:但丁(上) ','神圣诗篇套装:但丁(中) ','神圣诗篇套装:但丁(下)','适格者套装:哥伦布(上)','适格者套装:哥伦布(中)','适格者套装:哥伦布(下)','雾都神探套装:福尔摩斯(上)','雾都神探套装:福尔摩斯(中)','雾都神探套装:福尔摩斯(下)','冰之律者套装:安娜.沙尼亚特(上)','冰之律者套装:安娜.沙尼亚特(中)','冰之律者套装:安娜.沙尼亚特(下)']
up_stigma=['真理之翼套装:布洛妮娅.次生银翼(上)','真理之翼套装:布洛妮娅.次生银翼(中)','真理之翼套装:布洛妮娅.次生银翼(下)']star4pool={}
star4pool.update({'up_arms':up_arms})
star4pool.update({'not_up_arms':not_up_arms})
star4pool.update({'not_up_stigma':not_up_stigma})
star4pool.update({'up_stigma':up_stigma})
#print(star4pool)#抽卡距离出4星保底距离开始是10
distance=10
cardcount=0#存放最终结果的列表
listcard =[]#存放10次抽卡记录的临时列表
temporary_list=[]#这个参数是为了分辨出剩余抽卡次数少于10次,一个情况是总的抽卡次数n小于10
#还有一种是我前面10连了,剩下水晶不够10连
recordcount =0#star4pool通过value方法取出的类型是dict_values,需要做个类型转换,变成list
star4pool_values = list(star4pool.values())
#print(star4pool_values)#遍历上面的列表内部的列表,添加到四星武器的列表,为了最后统计4星装备做的
star4_list = []
for i in star4pool_values:for j in i:star4_list.append(j)
#print(star4_list)for i in range(n):#flag是做标签,看看这次10连过程中有没有出4星flag = False#传入单抽的概率字典,和所有装备和材料的卡池,得到一张卡result = matchfun.matchfun(CardprobabilityDict,dict_card)#print("这是抽到的结果",result)#抽卡次数加一cardcount += 1# 抽到4星卡了就重置保底if result in star4_list:distance = 10flag = Trueelse:distance -= 1print("哇这次抽到了%s"%result)print("还有%s次就保底了,加油"%distance)#将抽到的卡放进临时的列表中temporary_list.append(result)# 如果总共的抽卡次数少于10次,直接写入最终的列表if n < 10 and n == cardcount:#print("少于10次直接进最终表")listcard.extend(temporary_list)temporary_list.clear()cardcount=0breakif flag is False:#如果抽卡次数到了十,就要返回一次结果if cardcount==10:#print('这是10连里面没有4星的情况')# 临时表里现在一张4星卡都没有,从临时的表随便找到一张卡swap_card = random.choice(temporary_list)#print("t1",temporary_list)# 删除上面找到的那张卡temporary_list.remove(swap_card)#print("t2",temporary_list)# 从四星卡池中找随机一个装备出来start4_result = matchfun.matchfun(star4poolprobability, star4pool)#print("这是4星替换策略",start4_result)# 把这个四星装备加到临时列表中temporary_list.append(start4_result)# 把本次结果写进最终返回的列表中listcard.extend(temporary_list)cardcount = 0distance = 10temporary_list.clear()flag = Falserecordcount += 10if flag is True:if cardcount == 10:#print("#"*10)#print('这是10连里面有4星的情况')listcard.extend(temporary_list)cardcount = 0distance = 10temporary_list.clear()recordcount += 10flag=False#抽卡超过10次,剩余抽卡次数不足10的时候,也需要把结果写进我们最终返回的列表里if cardcount < 10 and n > 10:if recordcount >= 10 and n - recordcount == cardcount:#print("多余10次的部分,剩下不满足10次")listcard.extend(temporary_list)cardcount=0temporary_list.clear()#print(temporary_list)
#print(flag)
#print(cardcount)
#统计最后4星装备的数量
equipment=0
#统计最后普通装备的数量
normal_equipment=0
for i in listcard:if i in star4_list:equipment+=1else:normal_equipment+=1
print('本次精准普通装备数量:',normal_equipment)
print('本次精准4星装备数量:',equipment)
print(listcard)

matchfun类中的matchfun方法

作用是传入一个概率字典,通过生成一个随机数,在概率字典的value中匹配,找到一个key,然后取另一个字典中的任意一个值

import random
from honkaicard import randomchoice
def matchfun(dict1,dict2,dicts={},dict2s={}):dicts.clear()dict2s.clear()if dict1:#生成从0到100000的随机数number =random.uniform(0,100)number=round(number,3)dicts.update(dict1)#从概率字典中寻找这个随机数的位置for k,v in dicts.items():if v[0]<=number<v[1]:key = kdict2s.update(dict2)# 如果在carddict中有这个key,我们从中挑一个出来if key in dict2s:# 匹配相同的key,取得对应的value,我们的目标结果listfinal_list = dict2s.get(key)#print(final_list)# 从中找到一个元素返回result = randomchoice.randomchoice(final_list)# print(result)return result

randomchoice类中的 randomchoice方法

import random
#这个函数的方法是从列表中随机挑选出一个元素
def randomchoice(list1,lists=[]):if list1:lists.extend(list1)result = random.choice(lists)return result

崩坏三精准池python模拟相关推荐

  1. 用户存续期价值评估CLV(三) Gamma-Gamma模型 Python模拟

    Gamma-Gamma模型 前面已经提到过,Pareto/NBD和BG/NBD模型只对客户存续时间和交易次数进行建模,并不涉及客户未来交易所带来的现金价值. Gamma-Gamma模型就是对这个问题的 ...

  2. 基于酷Q的崩坏三抽卡模拟_C++入门级酷Q插件开发

    插件简介 为了高仿官方抽卡概率,我设计调整了数据,在一定程度上满足了出货期望和官方概率近视相等~(注意:不同十连间抽卡保底事件是相互独立的,同卡池单抽十连共享保底,抽卡保底不与抽卡的人有关)(Pro和 ...

  3. python模拟登录163邮箱_python模拟登陆163邮箱并下载邮件内容(第三版代码片段)

    python模拟登陆163邮箱并下载邮件内容(第三版代码片段) 注意: 1 由于163邮箱有众多版本,所以登录请求URL,邮件URL等可能也不太一样,下面是163的简约3.0 2 代码缺乏错误处理能力 ...

  4. 潜心专研Python模拟登陆专题,实现网易云音乐自动签到!这项目居然只值三百?

    前言: 时隔三周没有和大家见过面了,最近在研究python模拟登陆专题,话不多说,让我们愉快地开始实现模拟登陆实现网易云自动签到 开发工具 **Python****版本:**3.6.4 相关模块: D ...

  5. Python模拟赌博实验,赌博为什么能赌到倾家荡产?

    Python模拟赌博实验 作者:dalalaa http://www.jianshu.com/p/2d919a028600 概述 前言 实验思路 实验步骤 统计数据 结论 阿广说 福利一刻 推荐阅读 ...

  6. python 通过title判断_利用Python模拟GitHub登录

    点击关注,我们共同每天进步一点点! 最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fidd ...

  7. Ross《随机过程》(第二版)装填问题Python模拟实验

    实验环境: python2.7 运行时重定向到输出文件即可: python x.py > result.log 我们打算分三种情况模拟: 一,模拟直线末端为孤立点的情况,以P6为例进行模拟 二. ...

  8. Python模拟Linux的Crontab, 写个任务计划需求

    Python模拟Linux的Crontab, 写个任务计划需求 来具体点 需求:执行一个程序, 程序一直是运行状态, 这里假设是一个函数当程序运行30s的时候, 需要终止程序, 可以用python, ...

  9. pythoncookie自动模拟登录_用Python模拟技巧带你实现自动抽屉登录自动点赞

    原标题:用Python模拟技巧带你实现自动抽屉登录&自动点赞 /1 前言/ 嘿,各位小伙伴们晚上好呀,今天小编又给大家带来干货内容啦,今天带来的是,如何自动登录抽屉,并且点赞! 原计划是不打算 ...

最新文章

  1. ASP.NET实现数据图表
  2. Redis 越来越慢?常见延迟问题定位与分析
  3. 思岚M2M1~SLAM方案~导航
  4. Flutter实战视频-移动电商-59.购物车_计算商品价格和数量
  5. 细说php--php学习必备
  6. oracle 10g em 乱码问题解决方法
  7. 计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法
  8. H5:100款html5微信小游戏最新最新源码
  9. gg修改器ios版下载
  10. centos7下载,centos iso文件下载
  11. 路飞学城Python-Day49
  12. java模拟简单的qq聊天_初学java之模拟QQ聊天软件(简单实现)
  13. Excel2010条件格式结合公式和格式刷使用存在严重bug
  14. forward 和 redirect
  15. 码云果园:术后人群怎么吃水果
  16. 第03课:储备-用户故事精要(iPad 版)
  17. 1012: 8除不尽的数
  18. 【IT文化杂谈】硅谷,仙童与“八叛徒”的故事
  19. 【ESWIN编程大赛】五、2020年11月12日陈工直播笔记
  20. 制作html map工具,那些堪称神器的地图制作工具

热门文章

  1. 看过来!看过来!网络安全类的认证课程都在这里
  2. 电脑鼠标不管用但键盘可以用怎么办
  3. python kayb算法之从一组序列当中获取一组与目标值最接近的算法
  4. 多商户商城系统功能拆解39讲-平台端营销-砍价记录
  5. Kafka常用命令(1):kafka-topics
  6. ORA-01843 月份无效
  7. 题目:输入一个8bit数,输出其中1的个数,只能使用1bit全加器
  8. AutoCAD二次开发之删除图层及图层上所有的实体
  9. 你不知道的nodejs性能优化
  10. C语言变量前面加vol,Volitale