鱼C论坛

 找回密码
 立即注册
查看: 2221|回复: 4

[作品展示] 【明日方舟】抽卡模拟程序

[复制链接]
发表于 2020-2-15 13:50:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import random
  2. p6 = 2#初始抽到六星概率
  3. p5 = 10#初始抽到五星以上概率
  4. p4 = 60#初始抽到四星以上概率
  5. n = 0#未抽到六星次数初始为0
  6. q = 0#抽卡次数初始为0
  7. p = 0#抽卡次数(不重置)
  8. def single(t):
  9.     global p6,p5,p4
  10.     s6 = ['推进之王★★★★★★','陈★★★★★★','赫拉格★★★★★★','煌★★★★★★','斯卡蒂★★★★★★','银灰★★★★★★','黑★★★★★★','能天使★★★★★★','塞雷娅★★★★★★','星熊★★★★★★','闪灵★★★★★★','夜莺★★★★★★','安洁莉娜★★★★★★','麦哲伦★★★★★★','艾雅法拉★★★★★★','莫斯提马★★★★★★','伊芙利特★★★★★★','阿★★★★★★']
  11.     s5 = ['德克萨斯★★★★★','凛冬★★★★★','苇草★★★★★','布洛卡★★★★★','芙兰卡★★★★★','拉普兰德★★★★★','诗怀雅★★★★★','星极★★★★★','幽灵鲨★★★★★','白金★★★★★','灰喉★★★★★','蓝毒★★★★★','普罗旺斯★★★★★','守林人★★★★★','送葬人★★★★★','陨星★★★★★','吽★★★★★','可颂★★★★★','雷蛇★★★★★','临光★★★★★','白面鸮★★★★★','赫默★★★★★','华法琳★★★★★','初雪★★★★★','格劳克斯★★★★★','空★★★★★','梅尔★★★★★','真理★★★★★','天火★★★★★','夜魔★★★★★','红★★★★★','槐琥★★★★★','狮蝎★★★★★','食铁兽★★★★★','崖心★★★★★']
  12.     s4 = ['红豆★★★★','清道夫★★★★','桃金娘★★★★','缠丸★★★★','杜宾★★★★','猎蜂★★★★','慕斯★★★★','霜叶★★★★','安比尔★★★★','白雪★★★★','红云★★★★','杰西卡★★★★','流星★★★★','梅★★★★','古米★★★★','角峰★★★★','蛇屠箱★★★★','调香师★★★★','末药★★★★','苏苏洛★★★★','地灵★★★★','深海色★★★★','格雷伊★★★★','夜烟★★★★','远山★★★★','阿消★★★★','暗锁★★★★','砾★★★★']
  13.     s3 = ['芬★★★','翎羽★★★','香草★★★','玫兰莎★★★','泡普卡★★★','月见夜★★★','克洛丝★★★','空爆★★★','斑点★★★','卡缇★★★','米格鲁★★★','安塞尔★★★','芙蓉★★★','梓兰★★★','史都华德★★★','炎熔★★★']
  14.     if t == '1':
  15.         up6 = ['赫拉格★★★★★★','闪灵★★★★★★']
  16.         up5 = ['凛冬★★★★★','狮蝎★★★★★','华法琳★★★★★']
  17.     elif t == '2':
  18.         up6 = ['推进之王★★★★★★','陈★★★★★★']
  19.         up5 = ['德克萨斯★★★★★','真理★★★★★','凛冬★★★★★']
  20.     elif t == '3':
  21.         up6 = ['艾雅法拉★★★★★★','斯卡蒂★★★★★★']
  22.         up5 = ['夜魔★★★★★','赫默★★★★★','诗怀雅★★★★★']
  23.     else:
  24.         up6 = ['艾雅法拉★★★★★★','斯卡蒂★★★★★★']
  25.         up5 = ['夜魔★★★★★','赫默★★★★★','诗怀雅★★★★★']
  26.     i1 = random.uniform(0,100)#干员寻访开始,抽取随机数
  27.     i2 = random.uniform(0,20)#随机选择是否抽中up干员
  28.     if i1 < p6: #抽中六星干员
  29.         if i2 < 10:#抽中六星up
  30.             c = random.randint(0,1)#随机抽取两个六星干员中的一个
  31.             result = up6[c]
  32.         if i2 >= 10:
  33.             c = random.randint(0,15)#随机抽取剩余十六个六星干员
  34.             n6 = s6
  35.             n6.remove(up6[0])
  36.             n6.remove(up6[1])#得到剩余十六个六星干员列表
  37.             result = n6[c]
  38.     if i1 > p6 and i1 <= p5:#抽中五星干员
  39.         if i2 < 10:#抽中五星up
  40.             c = random.randint(0,2)#随机抽取三个五星干员中的一个
  41.             result = up5[c]
  42.         if i2 >= 10:
  43.             c = random.randint(0,31)#随机抽取剩余的五星干员
  44.             n5 = s5
  45.             n5.remove(up5[0])
  46.             n5.remove(up5[1])
  47.             n5.remove(up5[2])
  48.             result = n5[c]
  49.     if i1 > p5 and i1 <= p4:#抽中四星干员
  50.         c = random.randint(0,27)
  51.         result = s4[c]
  52.     if i1 > p4 and i1 < 100:#抽中三星干员
  53.         c = random.randint(0,15)
  54.         result = s3[c]
  55.     return result
  56. def draw(t,i):
  57.     global p6,p5,p4,n,q,p
  58.     q = 0
  59.     cal6 = 0
  60.     cal5 = 0
  61.     calup1 = 0
  62.     calup2 = 0
  63.     if t == '1':
  64.         checkup = ['赫拉格★★★★★★','闪灵★★★★★★']
  65.     elif t == '2':
  66.         checkup = ['推进之王★★★★★★','陈★★★★★★']
  67.     elif t == '3':
  68.         checkup = ['艾雅法拉★★★★★★','斯卡蒂★★★★★★']
  69.     else:
  70.         print('输入错误,将选择默认最新卡池:艾雅法拉、斯卡蒂卡池')
  71.         checkup = ['艾雅法拉★★★★★★','斯卡蒂★★★★★★']
  72.     while q < i:
  73.         result = single(t)
  74.         print(result)
  75.         q += 1
  76.         p += 1
  77.         check6 = ['推进之王★★★★★★','陈★★★★★★','赫拉格★★★★★★','煌★★★★★★','斯卡蒂★★★★★★','银灰★★★★★★','黑★★★★★★','能天使★★★★★★','塞雷娅★★★★★★','星熊★★★★★★','闪灵★★★★★★','夜莺★★★★★★','安洁莉娜★★★★★★','麦哲伦★★★★★★','艾雅法拉★★★★★★','莫斯提马★★★★★★','伊芙利特★★★★★★','阿★★★★★★']
  78.         check5 = ['德克萨斯★★★★★','凛冬★★★★★','苇草★★★★★','布洛卡★★★★★','芙兰卡★★★★★','拉普兰德★★★★★','诗怀雅★★★★★','星极★★★★★','幽灵鲨★★★★★','白金★★★★★','灰喉★★★★★','蓝毒★★★★★','普罗旺斯★★★★★','守林人★★★★★','送葬人★★★★★','陨星★★★★★','吽★★★★★','可颂★★★★★','雷蛇★★★★★','临光★★★★★','白面鸮★★★★★','赫默★★★★★','华法琳★★★★★','初雪★★★★★','格劳克斯★★★★★','空★★★★★','梅尔★★★★★','真理★★★★★','天火★★★★★','夜魔★★★★★','红★★★★★','槐琥★★★★★','狮蝎★★★★★','食铁兽★★★★★','崖心★★★★★']
  79.         if result not in check6:#未获得六星干员
  80.             n += 1#次数累积
  81.         if result in check6:#抽到六星干员
  82.             n = 0#次数重置
  83.             p6 = 2#重置抽到六星概率
  84.             p5 = 10#重置抽到五星以上概率
  85.             p4 = 60#重置抽到四星以上概率
  86.             cal6 += 1
  87.         if n >= 50 and n < 100:#概率变动
  88.             p4 = p6 + 2 + (p4-p6-2)*(p4-p6)/(100-p6)
  89.             p5 = p6 + 2 + (p5-p6-2)*(p4-p6)/(100-p6)
  90.             p6 += 2
  91.         if result in check5:
  92.             cal5 += 1
  93.         if result == checkup[0]:
  94.             calup1 += 1
  95.         if result == checkup[1]:
  96.             calup2 += 1
  97.     print('本次共寻访' + str(q) +'次,未获得六星' + str(n) + '次,消耗合成玉' + str(q*600) + ',消耗源石' + str(q*10/3) + '颗')
  98.     print('共获得六星干员' + str(cal6) + '个,五星干员' + str(cal5) + '个,六星up' + checkup[0] + str(calup1) + '个,六星up' + checkup[1] + str(calup2) + '个')
  99.     print('获得六星概率为:'+str(cal6/q)+'\n获得五星以上概率为:'+str(cal5/q))
  100.     print('总计共寻访' + str(p) +'次,消耗合成玉' + str(p*600) + ',消耗源石' + str(p*10/3) + '颗')
  101. title0 = '明日方舟干员寻访模拟程序'
  102. title1 = '卡池选择'
  103. title = title0.center(100)
  104. subtitle = title1.center(100)
  105. print(title)
  106. print(subtitle)
  107. print('(本程序支持【常驻标准寻访】)')
  108. t = str(input(' 1.【赫拉格,闪灵】【凛冬,狮蝎,华法琳】\n 2.【推进之王,陈】【德克萨斯,真理,凛冬】\n 3.【艾雅法拉,斯卡蒂】【夜魔,赫默,诗怀雅】\n 选择卡池:'))#卡池选择
  109. i = int(input('请输入寻访次数:'))
  110. draw(t,i)
  111. while 1:
  112.     v = input('下一步:\n1.继续寻访\n2.退出程序\n输入:')
  113.     if v == '1':
  114.         t = str(input(' 1.【赫拉格,闪灵】【凛冬,狮蝎,华法琳】\n 2.【推进之王,陈】【德克萨斯,真理,凛冬】\n 3.【艾雅法拉,斯卡蒂】【夜魔,赫默,诗怀雅】\n 选择卡池:'))#卡池选择
  115.         i = int(input('请输入寻访次数:'))
  116.         draw(t,i)
  117.     elif v == '2':
  118.         break
  119.     else:
  120.         print('请重新输入:\n1.继续寻访\n2.退出程序\n输入:')
复制代码


评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
qiuyouzhi + 5 + 5 鼓励一下~~

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-15 13:55:45 | 显示全部楼层
  1. import random
  2. import easygui as g

  3. p6 = 2#初始抽到六星概率
  4. p5 = 10#初始抽到五星以上概率
  5. p4 = 60#初始抽到四星以上概率
  6. n = 0#未抽到六星次数初始为0
  7. q = 0#抽卡次数初始为0
  8. p = 0#抽卡次数(不重置)
  9. result0 = ''

  10. def single(t):
  11.     global p6,p5,p4
  12.     s6 = ['推进之王★★★★★★','陈★★★★★★','赫拉格★★★★★★','煌★★★★★★','斯卡蒂★★★★★★','银灰★★★★★★','黑★★★★★★','能天使★★★★★★','塞雷娅★★★★★★','星熊★★★★★★','闪灵★★★★★★','夜莺★★★★★★','安洁莉娜★★★★★★','麦哲伦★★★★★★','艾雅法拉★★★★★★','莫斯提马★★★★★★','伊芙利特★★★★★★','阿★★★★★★']
  13.     s5 = ['德克萨斯★★★★★','凛冬★★★★★','苇草★★★★★','布洛卡★★★★★','芙兰卡★★★★★','拉普兰德★★★★★','诗怀雅★★★★★','星极★★★★★','幽灵鲨★★★★★','白金★★★★★','灰喉★★★★★','蓝毒★★★★★','普罗旺斯★★★★★','守林人★★★★★','送葬人★★★★★','陨星★★★★★','吽★★★★★','可颂★★★★★','雷蛇★★★★★','临光★★★★★','白面鸮★★★★★','赫默★★★★★','华法琳★★★★★','初雪★★★★★','格劳克斯★★★★★','空★★★★★','梅尔★★★★★','真理★★★★★','天火★★★★★','夜魔★★★★★','红★★★★★','槐琥★★★★★','狮蝎★★★★★','食铁兽★★★★★','崖心★★★★★']
  14.     s4 = ['红豆★★★★','清道夫★★★★','桃金娘★★★★','缠丸★★★★','杜宾★★★★','猎蜂★★★★','慕斯★★★★','霜叶★★★★','安比尔★★★★','白雪★★★★','红云★★★★','杰西卡★★★★','流星★★★★','梅★★★★','古米★★★★','角峰★★★★','蛇屠箱★★★★','调香师★★★★','末药★★★★','苏苏洛★★★★','地灵★★★★','深海色★★★★','格雷伊★★★★','夜烟★★★★','远山★★★★','阿消★★★★','暗锁★★★★','砾★★★★']
  15.     s3 = ['芬★★★','翎羽★★★','香草★★★','玫兰莎★★★','泡普卡★★★','月见夜★★★','克洛丝★★★','空爆★★★','斑点★★★','卡缇★★★','米格鲁★★★','安塞尔★★★','芙蓉★★★','梓兰★★★','史都华德★★★','炎熔★★★']
  16.     if t == '1':
  17.         up6 = ['赫拉格★★★★★★','闪灵★★★★★★']
  18.         up5 = ['凛冬★★★★★','狮蝎★★★★★','华法琳★★★★★']
  19.     elif t == '2':
  20.         up6 = ['推进之王★★★★★★','陈★★★★★★']
  21.         up5 = ['德克萨斯★★★★★','真理★★★★★','凛冬★★★★★']
  22.     elif t == '3':
  23.         up6 = ['艾雅法拉★★★★★★','斯卡蒂★★★★★★']
  24.         up5 = ['夜魔★★★★★','赫默★★★★★','诗怀雅★★★★★']
  25.     else:
  26.         up6 = ['艾雅法拉★★★★★★','斯卡蒂★★★★★★']
  27.         up5 = ['夜魔★★★★★','赫默★★★★★','诗怀雅★★★★★']
  28.     i1 = random.uniform(0,100)#干员寻访开始,抽取随机数
  29.     i2 = random.uniform(0,20)#随机选择是否抽中up干员
  30.     if i1 < p6: #抽中六星干员
  31.         if i2 < 10:#抽中六星up
  32.             c = random.randint(0,1)#随机抽取两个六星干员中的一个
  33.             result = up6[c]
  34.         if i2 >= 10:
  35.             c = random.randint(0,15)#随机抽取剩余十六个六星干员
  36.             n6 = s6
  37.             n6.remove(up6[0])
  38.             n6.remove(up6[1])#得到剩余十六个六星干员列表
  39.             result = n6[c]
  40.     if i1 > p6 and i1 <= p5:#抽中五星干员
  41.         if i2 < 10:#抽中五星up
  42.             c = random.randint(0,2)#随机抽取三个五星干员中的一个
  43.             result = up5[c]
  44.         if i2 >= 10:
  45.             c = random.randint(0,31)#随机抽取剩余的五星干员
  46.             n5 = s5
  47.             n5.remove(up5[0])
  48.             n5.remove(up5[1])
  49.             n5.remove(up5[2])
  50.             result = n5[c]
  51.     if i1 > p5 and i1 <= p4:#抽中四星干员
  52.         c = random.randint(0,27)
  53.         result = s4[c]
  54.     if i1 > p4 and i1 < 100:#抽中三星干员
  55.         c = random.randint(0,15)
  56.         result = s3[c]
  57.     return result
  58. def draw(t,i):
  59.     global p6,p5,p4,n,q,p,result0
  60.     q = 0
  61.     cal6 = 0
  62.     cal5 = 0
  63.     calup1 = 0
  64.     calup2 = 0
  65.    
  66.     if t == '1':
  67.         checkup = ['赫拉格★★★★★★','闪灵★★★★★★']
  68.     elif t == '2':
  69.         checkup = ['推进之王★★★★★★','陈★★★★★★']
  70.     elif t == '3':
  71.         checkup = ['艾雅法拉★★★★★★','斯卡蒂★★★★★★']
  72.     else:
  73.         g.msgbox('输入错误,将选择默认最新卡池:艾雅法拉、斯卡蒂卡池')
  74.         checkup = ['艾雅法拉★★★★★★','斯卡蒂★★★★★★']
  75.     while q < i:
  76.         result = single(t)
  77.         result0 = result0 + '\n' + result
  78.         q += 1
  79.         p += 1
  80.         check6 = ['推进之王★★★★★★','陈★★★★★★','赫拉格★★★★★★','煌★★★★★★','斯卡蒂★★★★★★','银灰★★★★★★','黑★★★★★★','能天使★★★★★★','塞雷娅★★★★★★','星熊★★★★★★','闪灵★★★★★★','夜莺★★★★★★','安洁莉娜★★★★★★','麦哲伦★★★★★★','艾雅法拉★★★★★★','莫斯提马★★★★★★','伊芙利特★★★★★★','阿★★★★★★']
  81.         check5 = ['德克萨斯★★★★★','凛冬★★★★★','苇草★★★★★','布洛卡★★★★★','芙兰卡★★★★★','拉普兰德★★★★★','诗怀雅★★★★★','星极★★★★★','幽灵鲨★★★★★','白金★★★★★','灰喉★★★★★','蓝毒★★★★★','普罗旺斯★★★★★','守林人★★★★★','送葬人★★★★★','陨星★★★★★','吽★★★★★','可颂★★★★★','雷蛇★★★★★','临光★★★★★','白面鸮★★★★★','赫默★★★★★','华法琳★★★★★','初雪★★★★★','格劳克斯★★★★★','空★★★★★','梅尔★★★★★','真理★★★★★','天火★★★★★','夜魔★★★★★','红★★★★★','槐琥★★★★★','狮蝎★★★★★','食铁兽★★★★★','崖心★★★★★']
  82.         if result not in check6:#未获得六星干员
  83.             n += 1#次数累积
  84.         if result in check6:#抽到六星干员
  85.             n = 0#次数重置
  86.             p6 = 2#重置抽到六星概率
  87.             p5 = 10#重置抽到五星以上概率
  88.             p4 = 60#重置抽到四星以上概率
  89.             cal6 += 1
  90.         if n >= 50 and n < 100:#概率变动
  91.             p4 = p6 + 2 + (p4-p6-2)*(p4-p6)/(100-p6)
  92.             p5 = p6 + 2 + (p5-p6-2)*(p4-p6)/(100-p6)
  93.             p6 += 2
  94.         if result in check5:
  95.             cal5 += 1
  96.         if result == checkup[0]:
  97.             calup1 += 1
  98.         if result == checkup[1]:
  99.             calup2 += 1
  100.     g.textbox(msg = '您的抽卡结果如下,快看看出货了没有吧!',
  101.               title = '抽卡结果',text = result0
  102.               +'\n本次共寻访' + str(q) +'次,未获得六星' + str(n)
  103.               + '次,消耗合成玉' + str(q*600) +
  104.               ',消耗源石' + str(q*10/3) + '颗\n'
  105.               '共获得六星干员' + str(cal6)
  106.               + '个,五星干员' + str(cal5)
  107.               + '个,六星up' + checkup[0]
  108.               + str(calup1) + '个,六星up'
  109.               + checkup[1] + str(calup2) + '个\n'
  110.               '获得六星概率为:'+str(cal6/q)+'\n获得五星以上概率为:'+ str(cal5/q)+
  111.               '\n总计共寻访' + str(p) +'次,消耗合成玉' + str(p*600)+
  112.               ',消耗源石' + str(p*10/3) + '颗')


  113. title0 = '明日方舟干员寻访模拟程序'
  114. title1 = '卡池选择'
  115. title = title0.center(20)
  116. subtitle = title1.center(20)
  117. print('Loading......')

  118. g.msgbox(msg ='明日方舟干员寻访模拟程序\n本程序支持【标准寻访】',ok_button = '开始寻访')

  119. def choose():
  120.     choices = ['1.【赫拉格,闪灵】【凛冬,狮蝎,华法琳】',
  121.            '2.【推进之王,陈】【德克萨斯,真理,凛冬】',
  122.            '3.【艾雅法拉,斯卡蒂】【夜魔,赫默,诗怀雅】']
  123.     t = g.choicebox('请选择卡池:',choices = choices)
  124.     t = t[0]
  125.     int(t)
  126.     return t
  127. t = choose()
  128. i = int(g.enterbox(msg = '请输入抽卡次数:'))

  129. draw(t,i)
  130. while 1:
  131.     v = g.ccbox(msg = '下一步:\n1.继续寻访\n2.退出程序\n输入:',title = 'NEXT',
  132.                 choices = ('1.继续寻访','2.退出程序'),
  133.                 )
  134.     if v == True:
  135.         t = choose()
  136.         i = int(g.enterbox(msg = '请输入抽卡次数:'))
  137.         draw(t,i)
  138.     elif v == False:
  139.         break
复制代码


这是用easyGUI的版本
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-15 14:05:40 | 显示全部楼层
白咕咕 发表于 2020-2-15 13:55
这是用easyGUI的版本

不错,继续加油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-15 14:15:05 | 显示全部楼层

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 10:24:52 | 显示全部楼层
要是有图就牛逼了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-1 06:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表