You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

教授给出的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:27:04