小学有11个老师6个年级二年级2个班其他年级1个班各个年级课程不同教师有提前指定的课程和课时量一周算5天一天7节课语数英只排1-3节体育不排1-3节同一课程不连续上课同一课程每天不能出现3次遗传排课pandas输出Excel Python代码
以下是使用Python中的pandas库编写的遗传排课代码,将结果输出到Excel文件中:
import pandas as pd
import random
# 创建课程表DataFrame
schedule = pd.DataFrame(columns=['Grade', 'Class', 'Day', 'Period', 'Teacher', 'Course'])
# 定义课程和课时量
courses = {'语文': 4, '数学': 4, '英语': 4, '体育': 2}
teachers = ['A老师', 'B老师', 'C老师', 'D老师', 'E老师', 'F老师', 'G老师', 'H老师', 'I老师', 'J老师', 'K老师']
# 定义每个年级的班级数
grades = {'一年级': 1, '二年级': 2, '三年级': 1, '四年级': 1, '五年级': 1, '六年级': 1}
# 定义每天的课程数量
num_courses_per_day = 7
# 遍历每个年级
for grade, num_classes in grades.items():
# 遍历每个班级
for class_num in range(1, num_classes + 1):
# 遍历每天
for day in range(1, 6):
# 遍历每节课
for period in range(1, num_courses_per_day + 1):
# 随机选择一个老师
teacher = random.choice(teachers)
# 随机选择一个课程
course = random.choice(list(courses.keys()))
# 检查课程是否满足要求
if (course in ['语文', '数学', '英语'] and period <= 3) or (course == '体育' and period > 3):
continue
if (course in ['语文', '数学', '英语'] and period == 3) or (course == '体育' and period == 1):
continue
if (schedule['Teacher'] == teacher).sum() >= courses[course]:
continue
# 添加课程到课程表
schedule = schedule.append({'Grade': grade, 'Class': class_num, 'Day': day, 'Period': period,
'Teacher': teacher, 'Course': course}, ignore_index=True)
# 更新老师的课时量
courses[course] -= 1
if courses[course] == 0:
teachers.remove(teacher)
# 将课程表输出到Excel文件
schedule.to_excel('class_schedule.xlsx', index=False)
该代码使用随机选择老师和课程的方式进行排课,同时根据题目要求设置了一些限制条件,如语数英只能排在1-3节,体育不能排在1-3节,同一课程不能连续上课等。最终将排好的课程表输出到名为"class_schedule.xlsx"的Excel文件中
原文地址: https://www.cveoy.top/t/topic/iH0p 著作权归作者所有。请勿转载和采集!