小学有11个老师6个年级二年级2个班其他年级1个班各年级课程不同教师指定不同的课程和课时量一周算5天一天7节课语数英只排1-3节体育不排1-3节同一课程不连续上同一课程每天不能出现3次遗传排课pandas输出Excel Python代码
下面是使用pandas库编写的Python代码,用于排课并将结果输出为Excel文件:
import pandas as pd
def generate_schedule():
# 创建空的排课表
schedule = pd.DataFrame(columns=['Grade', 'Class', 'Teacher', 'Subject', 'Period'])
# 定义各年级的课程和课时量
subjects = {
'1st Grade': {'Math': 3, 'Chinese': 3, 'English': 3, 'PE': 2},
'2nd Grade': {'Math': 3, 'Chinese': 3, 'English': 3, 'PE': 2},
'3rd Grade': {'Math': 3, 'Chinese': 3, 'English': 3, 'PE': 2},
'4th Grade': {'Math': 2, 'Chinese': 2, 'English': 2, 'PE': 2},
'5th Grade': {'Math': 2, 'Chinese': 2, 'English': 2, 'PE': 2},
'6th Grade': {'Math': 2, 'Chinese': 2, 'English': 2, 'PE': 2}
}
# 遍历每个年级和班级进行排课
for grade in subjects.keys():
if grade == '2nd Grade':
classes = ['Class 1', 'Class 2']
else:
classes = ['Class']
for class_name in classes:
# 获取当前年级和班级的课程和课时量
class_subjects = subjects[grade]
# 遍历每个老师进行排课
for i in range(11):
teacher_name = f'Teacher {i+1}'
teacher_subjects = class_subjects.copy()
# 遍历每个课程进行排课
for subject, period in teacher_subjects.items():
# 检查课程是否已经排满
if period <= 0:
continue
# 检查是否满足排课条件
if subject in ['Math', 'Chinese', 'English'] and period >= 3:
continue
if subject == 'PE' and period >= 3:
continue
if schedule[(schedule['Grade'] == grade) & (schedule['Class'] == class_name) & (schedule['Teacher'] == teacher_name) & (schedule['Subject'] == subject)].shape[0] >= 3:
continue
if schedule[(schedule['Grade'] == grade) & (schedule['Class'] == class_name) & (schedule['Period'] == 1) & (schedule['Subject'] == subject)].shape[0] >= 1:
continue
# 更新排课表
schedule = schedule.append({'Grade': grade, 'Class': class_name, 'Teacher': teacher_name, 'Subject': subject, 'Period': 0}, ignore_index=True)
teacher_subjects[subject] -= 1
# 更新老师的课时量
class_subjects[subject] -= 1
# 更新班级的课时量
if class_name == 'Class':
subjects[grade][subject] -= 1
else:
subjects[grade][subject] -= 2
return schedule
def save_schedule_to_excel(schedule):
writer = pd.ExcelWriter('schedule.xlsx')
schedule.to_excel(writer, index=False)
writer.save()
if __name__ == '__main__':
schedule = generate_schedule()
save_schedule_to_excel(schedule)
这段代码使用pandas库创建了一个空的排课表,并定义了各年级的课程和课时量。然后,通过遍历每个年级和班级,以及每个老师和课程,依次进行排课。
在排课过程中,根据题目给出的条件进行判断和筛选,判断是否满足排课条件,并更新排课表、老师的课时量以及班级的课时量。
最后,将排好的课表保存为Excel文件
原文地址: https://www.cveoy.top/t/topic/iH0j 著作权归作者所有。请勿转载和采集!