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