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

如何按规则生成满足选课多重约束的所有合法课程组合?

选课约束匹配的可行实现方案

不管选什么工具,第一步先做数据结构化:把课表每一列的可选课程全部整理出来,给每门课标记3个关键属性:所属选课列、对应的颜色类别、课程等级(HL/SL)。嫌手动录入麻烦的话,先用OCR工具识别课表截图里的表格,再校对下识别错误就行,能省不少时间。


方案1:Excel零代码实现,上手最快

完全不需要写代码,会基础的Excel操作就能做:

  • 先建课程基础表:表头设为「所属列号」「课程名称」「颜色类别」「课程等级」,把整理好的所有课程逐行录入
  • 做选课下拉框:给6个选课位各加一个数据验证下拉菜单,下拉选项仅对应该列下的可选课程,从根源上避免选到同列的课
  • 配置条件格式自动校验,不符合规则就标红提醒:
    • 列规则校验:统计选中课程的列号去重数,不等于6就标红
    • 颜色规则校验:统计选中课程的颜色类别去重数,没覆盖全部颜色类别就标红;单独统计黄色、橙色课程的总数量,小于2就标红(刚好满足覆盖全类别+额外选1门黄/橙课的要求)
    • 等级规则校验:分别统计选中课程里HL、SL的数量,任意一个不等于3就标红
  • 选课时只要所有校验项都不触发标红,就是符合全部规则的有效选课组合。

方案2:Python脚本实现,可一键输出所有合法组合

如果想一次性拿到所有符合要求的选课方案,再从中挑最适合自己的,用Python写个简单脚本效率最高,核心代码不到20行:

  • 先把整理好的结构化课程数据按列分组,存成嵌套列表或者CSV文件,每条课程数据包含名称、颜色、等级三个字段
  • 调用标准库itertools.product生成所有「每列选1门」的可能组合,因为每列可选课程数不多,总组合数量级很小,普通电脑几秒就能算完
  • 按规则逐层过滤无效组合:
    1. 先筛掉总门数不是6、存在同列重复选课的组合
    2. 再筛掉未覆盖全部颜色类别、黄/橙色课程总数不足2门的组合
    3. 最后筛掉HL课程数不是3、SL课程数不是3的组合
  • 过滤后剩下的就是全部符合要求的选课方案,你可以再按自己的课程偏好、上课时间等自定义规则二次筛选。

内容的提问来源于stack exchange,提问作者Laurian de Ru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:36:27