小学有11个老师6个年级班数不同年级指定不同的课程不同教师指定不同的课程和课时量一周算5天一天7节课语数英只排1-3节体育不排1-3节同一课程不连续上同一课程每天不能出现3次遗传排课pandas输出Excel Python代码
以下是使用Pandas库编写的Python代码,用于生成排课表并将其输出为Excel文件:
import pandas as pd
# 创建老师、年级和课程的列表
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
grades = ['Grade1', 'Grade2', 'Grade3', 'Grade4', 'Grade5', 'Grade6']
courses = ['Chinese', 'Math', 'English', 'PE', 'Science', 'Art']
# 创建空的排课表
timetable = pd.DataFrame(columns=['Teacher', 'Grade', 'Course', 'Day', 'Period'])
# 遍历老师、年级和课程列表,生成排课表
for teacher in teachers:
for grade in grades:
for course in courses:
# 如果是语数英课程,则排在1-3节课之间
if course in ['Chinese', 'Math', 'English']:
periods = [1, 2, 3]
# 如果是体育课程,则不排在1-3节课之间
elif course == 'PE':
periods = [4, 5, 6, 7]
# 其他课程排在任意时间段
else:
periods = [1, 2, 3, 4, 5, 6, 7]
# 遍历每天和时间段,将课程安排到排课表中
for day in range(1, 6):
for period in periods:
# 检查同一课程是否连续上
if len(timetable[(timetable['Teacher'] == teacher) & (timetable['Course'] == course)]) > 0:
last_period = timetable[(timetable['Teacher'] == teacher) & (timetable['Course'] == course)]['Period'].values[-1]
if abs(last_period - period) == 1:
continue
# 检查同一课程是否每天出现3次
if len(timetable[(timetable['Teacher'] == teacher) & (timetable['Course'] == course) & (timetable['Day'] == day)]) >= 3:
continue
# 将课程安排添加到排课表中
timetable = timetable.append({'Teacher': teacher, 'Grade': grade, 'Course': course, 'Day': day, 'Period': period}, ignore_index=True)
# 将排课表输出为Excel文件
timetable.to_excel('timetable.xlsx', index=False)
上述代码根据所提供的要求,生成了一个排课表,其中包含了每个老师在每个年级上每门课程的安排。最后,将排课表输出为名为timetable.xlsx的Excel文件
原文地址: https://www.cveoy.top/t/topic/iH0f 著作权归作者所有。请勿转载和采集!