如何用Python找到阴阳师妖怪屋的最佳探索队伍!强不强?
程序由来最初想要写这个小程序是因为 , 9月份那段时间我在玩妖怪屋 。
因为刚开始抽卡 , 要啥啥没有 , 所以探索队伍也只是放了几个自己记得有关联的式神 。
在网上有找到完整版的羁绊 , 但是怎么根据羁绊找到最佳的式神组合就成问题了 。
【如何用Python找到阴阳师妖怪屋的最佳探索队伍!强不强?】当时我是通过手动算出来的结果 , 后来想到自己刚刚把python基础啃完 , 也许可以试试用python来实现 。 万一后续改进的不错能放上简历呢?
于是就有了这个程序 。
整体思路
- 获取使用者的式神录
- 找到可以组成的羁绊
- 组合上述的羁绊
- 根据条件(8人 , buff最大)找到最优解
一是羁绊是游戏中设定好的 。 可以通过先对各个羁绊的属性进行定义 , 然后确认是否有羁绊中的式神存在于使用者式神录中 。
二是把各个羁绊组合的人数和增强buff算出来 , 然后排除不符合要求的情况 。
编写过程先按照思路把整个程序写出来 , 然后不断的把一些内容改成函数 , 把一些输出不规范会导致的错误一一解决 , 接着阅读整个程序的代码 , 并对注释进行改写 。
今天比较仓促 , 详细的过程不知道后续有没有机会补上 , 请让我先放上完整代码 。
写程序的过程中 , 我还在论坛里找了很多方法用在程序里 , 以保证程序是按照我的思路实现的 。
包括通过集合去重 , 确认A是否属于B , 通过combinations对羁绊进行组合 , 以及通过re替换非中文字等等 。
在此谢谢各位大佬的奉献 。
完整代码onmyoji(主程序)
"""本项目是基于阴阳师妖怪屋的探索玩法编写的 。 目的是让使用者能够快速根据拥有的式神 , 组合出能让增强buff最大化的8人组合 。 探索玩法可派遣8位式神进行不断探索 。 不同式神可组成不同羁绊 , 羁绊在游戏中是固定的 , 式神组成羁绊可获得增强buff , 即额外探索奖励 。 本项目使用方法 , 只需规范输入内容 , 并进行分隔 , 在完成输入后以N或n结尾即可 。 该项目结果只会出现第一个增强buff最大的组合 , 请知悉 。 本项目计算过程:1.获取使用者的式神录 , 进行处理后获得单个式神的集合 , 保存至使用者变量type中 。 2.根据这些式神从式神字典中找到可以组成的羁绊 , 保存其在字典中位置至使用者变量loc中 。 3.将不同羁绊可组成的组合(后续称为羁绊组合) , 占用人数 , 增强buff放在一个字典中 , 保存至使用者变量total中 。 4.对total中每个可组成羁绊组合 , 进行对比 , 占用人数合规(8位) , 且增强等级最大的组合保存至best中 , 并输出 。 """import function as fuimport dictionary as dicimport shiki as sk#将我拥有的式神设为一个空的集合,方便后续添加式神shiki_you = sk.Shiki(set(()))#建立一个集合包括所有羁绊组合的式神"""白狼,茨木童子,大天狗,独眼小僧,鬼使白,鬼使黑,蝴蝶精,九命猫,酒吞童子,傀儡师,镰鼬,孟婆,犬神,山兔,少羽大天狗,桃花妖,天邪鬼赤,天邪鬼黄,天邪鬼绿,天邪鬼青,铁鼠,巫蛊师,雪女,阎魔,妖刀姬,樱花妖,萤草"""shiki_all = dic.shiki_all#通过使用者录入 , 获取使用者的式神录while True:#获取使用者输入的式神#输入中如果有汉字或N,n以外的字符 , 都replace为,号 , 并进行分隔 。 当输入为N或n时 , 结束输入 。shiki = input('Would you like to tell me your shiki name? please use \',\' to split.')#对输入内容进行处理 , 判断input的内容是不是为N或n , 即对方有否完成输入过程 。 N为完成输入 。if fu.check_go_on(shiki):break#对输入内容进行处理 , 保证输入内容合规后 , 更新至使用者的式神录fu.input_shiki(shiki, shiki_you)#通过计算获得可组成的最大增强buff的羁绊组合#可以更改组队人数设定限制 , 即将fu.get_max_buff(shiki_you)的默认参数n进行改动fu.get_max_buff(shiki_you)
shikifrom itertools import combinationsclass Shiki():#type是指拥有的式神 , loc是指羁绊在diction2的位置 , 包括0 ,#comb是指各羁绊能组合成的组合 , 使用loc来表示羁绊所处位置#total是集合了羁绊组合 , 组合占用人数和增强buff的字典def __init__(self,type):self.type = typeself.loc = []self.total = {}self.best_max = 0self.best = {}#获取所有羁绊可以组成的组合,请注意当i=1时 , 羁绊可组成的组合只有一个#而元组中只包含一个元素时 , 需要在元素后面添加逗号 , 否则括号会被当作运算符使用def combine(self):'''根据n获得列表中的所有可能组合(n个元素为一组)'''temp_list2 = []end_list = []for i in range(len(self.loc)):for c in combinations(self.loc,i):temp_list2.append(c)#print(i,c,len(c))temp_list2.append(tuple(self.loc))#temp_list2 = sorted(list(set(temp_list2)))return temp_list2
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 培育|跨境电商人才如何培育,长沙有“谱”了
- 抖音小店|抖音进军电商,短视频的商业模式与变现,创业者该如何抓住机遇?
- 计费|5G是如何计费的?
- 车轮旋转|牵引力控制系统是如何工作的?它有什么作用?
- 视频|短视频如何在前3秒吸引用户眼球?
- Vlog|中国Vlog|中国基建如何升级?看5G+智慧工地
- 涡轮|看法米特涡轮流量计如何让你得心应手
- 手机|OPPO手机该如何截屏?四种最简单的方法已汇总!
- 和谐|人民日报海外版今日聚焦云南西双版纳 看科技如何助力人象和谐