Python编写适配变量动态增减的共同空闲时段匹配算法咨询
好友空闲时段匹配算法优化方案
原代码存在的问题
- 硬编码固定遍历5天、7节课,后续调整作息、新增周末需要手动修改多处代码
- 只能固定匹配d、k两个用户的共同空闲,新增/删除好友需要手动修改判断条件
- 索引逻辑固定,数据长度变化容易出现索引越界报错
优化后代码
exec(open("data.py").read()) # 周列表,后续新增周六周日直接在此处添加即可 week_days = ["monday", "tuesday", "wednesday", "thursday", "friday"] # 所有用户的空闲数据数组,新增/删除用户仅需调整此列表 user_list = [d, k, m] # 动态计算可匹配的最大天数,避免索引越界 max_day = min(len(u) for u in user_list) # 每日最大课程节数,可根据实际情况调整 max_course = 10 free = [] for day_idx in range(max_day): current_day_free = [week_days[day_idx]] for course in range(1, max_course + 1): # 校验所有用户当前时段是否都空闲 is_all_free = True for user_data in user_list: if course not in user_data[day_idx]: is_all_free = False break if is_all_free: current_day_free.append(course) free.append(current_day_free) print(current_day_free) # 若需将结果写回data.py可使用下方代码 with open("data.py", "a", encoding="utf-8") as f: f.write(f"\nfree = {free}\n")
可选更安全的存储方案
原方案使用exec加载外部py文件存在安全风险,可改用json格式存储数据:
写入数据
import json save_data = {"m": m, "d": d, "k": k} with open("data.json", "w", encoding="utf-8") as f: json.dump(save_data, f, ensure_ascii=False, indent=2)
读取数据
import json with open("data.json", "r", encoding="utf-8") as f: load_data = json.load(f) m, d, k = load_data["m"], load_data["d"], load_data["k"]
内容的提问来源于stack exchange,提问作者pepusmaximus
相关产品推荐
相关产品推荐

