小学排课系统:Python Pandas 实现自动排课算法
以下是一个使用 pandas 库输出每天每节课课程表到 Excel 的 Python 代码示例:\n\npython\nimport pandas as pd\n\n# 定义各个年级的科目和课时量\ngrade_subjects = {\n '一年级': {'语文': 4, '数学': 4, '英语': 4, '体育': 2, '音乐': 1, '美术': 1},\n '二年级': {'语文': 4, '数学': 4, '英语': 4, '体育': 2, '音乐': 1, '美术': 1},\n '三年级': {'语文': 4, '数学': 4, '英语': 4, '体育': 2, '音乐': 1, '美术': 1},\n '四年级': {'语文': 4, '数学': 4, '英语': 4, '体育': 2, '音乐': 1, '美术': 1},\n '五年级': {'语文': 4, '数学': 4, '英语': 4, '体育': 2, '音乐': 1, '美术': 1},\n '六年级': {'语文': 4, '数学': 4, '英语': 4, '体育': 2, '音乐': 1, '美术': 1},\n}\n\n# 定义老师的科目和课时量\nteacher_subjects = {\n '张老师': {'语文': 10, '数学': 10, '英语': 10},\n '李老师': {'语文': 10, '数学': 10, '英语': 10},\n '王老师': {'语文': 10, '数学': 10, '英语': 10},\n '赵老师': {'语文': 10, '数学': 10, '英语': 10},\n '钱老师': {'语文': 10, '数学': 10, '英语': 10},\n '孙老师': {'语文': 10, '数学': 10, '英语': 10},\n '周老师': {'语文': 10, '数学': 10, '英语': 10},\n '吴老师': {'语文': 10, '数学': 10, '英语': 10},\n '郑老师': {'语文': 10, '数学': 10, '英语': 10},\n '王老师': {'语文': 10, '数学': 10, '英语': 10},\n '赵老师': {'语文': 10, '数学': 10, '英语': 10},\n}\n\n# 创建一个空的课程表DataFrame\ntimetable = pd.DataFrame(columns=['年级', '班级', '星期', '节次', '科目', '教师'])\n\n# 遍历每个年级和班级,进行排课\nfor grade in grade_subjects.keys():\n for i in range(1, 7):\n for day in range(1, 6):\n for period in range(1, 8):\n # 判断是否为语数英科目\n if period <= 3 and grade_subjects[grade].get('语文'):\n subject = '语文'\n elif period <= 3 and grade_subjects[grade].get('数学'):\n subject = '数学'\n elif period <= 3 and grade_subjects[grade].get('英语'):\n subject = '英语'\n elif grade_subjects[grade].get('体育'):\n subject = '体育'\n elif grade_subjects[grade].get('音乐'):\n subject = '音乐'\n elif grade_subjects[grade].get('美术'):\n subject = '美术'\n else:\n continue\n \n # 获取可用的老师列表\n available_teachers = []\n for teacher in teacher_subjects.keys():\n if teacher_subjects[teacher].get(subject):\n available_teachers.append(teacher)\n \n # 判断是否有可用的老师\n if not available_teachers:\n continue\n \n # 获取老师的课时量\n teacher_workload = {}\n for teacher in available_teachers:\n teacher_workload[teacher] = teacher_subjects[teacher][subject]\n \n # 按照课时量排序老师\n sorted_teachers = sorted(teacher_workload.keys(), key=lambda t: teacher_workload[t])\n \n # 选择最少课时的老师\n selected_teacher = sorted_teachers[0]\n \n # 更新老师的课时量\n teacher_subjects[selected_teacher][subject] -= 1\n \n # 添加课程到课程表\n timetable = timetable.append({\n '年级': grade,\n '班级': i,\n '星期': day,\n '节次': period,\n '科目': subject,\n '教师': selected_teacher\n }, ignore_index=True)\n\n# 输出课程表到 Excel\ntimetable.to_excel('timetable.xlsx', index=False)\n\n\n这段代码会生成一个名为timetable.xlsx的 Excel 文件,包含了每天每节课的课程表。
原文地址: https://www.cveoy.top/t/topic/qosG 著作权归作者所有。请勿转载和采集!