教授给出的Python合并日程函数运行无输出崩溃如何解决
问题根因
你的程序触发了死循环,同时合并逻辑存在错误,具体问题如下:
- 第三个while循环的判断条件写错:原代码写的是
while i < len(pers2Schedule),你始终用已经不再更新的i判断第二个人的日程遍历进度,j一直在自增但i不变,只要遍历完第一个人日程时i的值小于第二个人的日程长度,这个循环就永远不会退出,CPU被占满就会出现风扇狂转、程序崩溃的情况。 - 剩余元素追加逻辑错误:第一个大循环结束后,剩下的两个while循环里你一直在追加之前缓存的
meeting1/meeting2,没有实时取当前索引对应的日程元素,即使死循环修复,合并结果也是错误的。 - 额外逻辑前提问题:归并逻辑的前提是两份输入日程本身已经按会议开始时间升序排序,你给出的示例输入中
pers1Schedule的第二个会议['7:00', '8:30']开始时间早于第一个会议的结束时间且未按开始时间正确有序排列,会导致合并结果不符合预期。
修正后的代码
def mergedSchedules(pers1Schedule, pers2Schedule): merged =[] i,j =0,0 while i < len(pers1Schedule) and j < len(pers2Schedule): meeting1, meeting2 = pers1Schedule[i], pers2Schedule[j] if meeting1[0] <= meeting2[0]: merged.append(meeting1) i+=1 else: merged.append(meeting2) j+=1 # 追加第一个人剩余的日程 while i < len(pers1Schedule): merged.append(pers1Schedule[i]) i+=1 # 追加第二个人剩余的日程,修正判断条件为j while j < len(pers2Schedule): merged.append(pers2Schedule[j]) j+=1 return merged pers1Schedule = [['0:00', '9:00'], ['7:00', '8:30'], ['12:00', '13:00'], ['16:00', '18:00'], ['19:00', '23:59']] pers2Schedule = [['0:00', '9:00'], ['9:00', '10:30'], ['12:20', '14:30'], ['14:00', '15:00'], ['16:00', '17:00'], ['18: 30', '23:59']] # 可以先对输入列表按开始时间排序再合并,保证结果正确 pers1Schedule.sort(key=lambda x:x[0]) pers2Schedule.sort(key=lambda x:x[0]) print(mergedSchedules(pers1Schedule, pers2Schedule))
补充说明
如果你的需求是合并后还要去重重叠的日程区间,可以在归并完成后再加一步区间合并逻辑即可。
内容的提问来源于stack exchange,提问作者zayant21
相关产品推荐
相关产品推荐

