import re from tinydb import TinyDB, Query from src.gr_func import _get_medicine_elixir_config,material_table def get_need_material(medicine_select, medicine_level_select="ALL",material_max_num=16) ->list: material = Query() m = _get_medicine_elixir_config(medicine_select) func1_type = m["func1_type"] func1_power = m["func1_power"] func2_type = m["func2_type"] func2_power = m["func2_power"] if medicine_level_select == "ALL": a = material_table.search((material.main_func_t == func1_type) | (material.auxi_func_t == func1_type) | ( material.main_func_t == func2_type) | (material.auxi_func_t == func2_type)) else: a = material_table.search((material.level == medicine_level_select) & ( (material.main_func_t == func1_type) | (material.auxi_func_t == func1_type) | ( material.main_func_t == func2_type) | (material.auxi_func_t == func2_type))) def get_num(material0): global material_second_f name = material0["name"] if material0["main_func_t"] == func1_type: material_second_f = (func2_type,False) num = func1_power / material0["main_func_p"] elif material0["auxi_func_t"] == func1_type: material_second_f = (func2_type,True) num = func1_power / material0["auxi_func_p"] elif material0["main_func_t"] == func2_type: material_second_f = (func1_type,False) num = func2_power / material0["main_func_p"] elif material0["auxi_func_t"] == func2_type: material_second_f = (func1_type,True) num = func2_power / material0["auxi_func_p"] num = int(num) + 1 if num > int(num) else int(num) return (name,num,material_second_f) rtn = list(map(get_num, a)) rtn = list(filter(lambda x:x[1]<=material_max_num, rtn)) def check_material(material0): if material0[1] > material_max_num: return False material_t = material.main_func_t if material0[2][1] else material.auxi_func_t a = material_table.search(material_t == material0[2][0]) if a == []: return False return True rtn = list(filter(check_material, rtn)) rtn = list(map(lambda x: (x[0],x[1]), rtn)) return rtn grade_str = "一二三四五六七八九" def sort_yaocai(text,medicine_select,material_num): material_need_dict = {} if medicine_select != "无": material_need_list = get_need_material(medicine_select,material_max_num=material_num) for name,num in material_need_list: material_need_dict[name[:-4]] = num print(material_need_dict) regex = re.compile("名字:.+\n品级:.+\n.+\n.+\n拥有数量:\d+") yaocai_l = regex.findall(text) rtn = [] for yaocai in yaocai_l: yaocai = yaocai.split("\n") name = yaocai[0][3:] num = int(yaocai[-1][5:]) grade = grade_str.index(yaocai[1][3])+1 flag = material_need_dict.get(name) if flag is not None: if num >= flag: flag = "+" else: num = f"{num}({flag})" flag = "-" rtn.append((name,grade,num,flag)) return rtn