教室-课时-课程随机动态排课时课室简单实现,python
根据一定的约束条件实现排课室系统。现假设一个学校有15个班级,6个教室。要求这15个班级从周二到周五这四天,每一个班级每一天都只安排上一节英语课。其中,学校的课时表上午四节(上午1,上午2,上午3,上午4),下午三节(下午1,下午2,下午3)。
(1)将上述问题抽象为数学-计算模型,则可以是,在以横坐标为教室(1,2,3,4,5,6),纵坐标为课时(1,2,3,4,5,6,7)组合形成的6X7平面坐标图,随机放入15个班级,当然,这些班级落入到坐标轴的点不能重复(重复意味着可是课室安排重叠-冲突)。
(2)在(1)中放入15个班级后,相当于一张二维坐标平面图形成,但只是一天的,所以循环4次(四天),即形成最终周二到周五的四天完整课时课室排表。
import random
times = ['上午1', '上午2', '上午3', '上午4', '下午1', '下午2', '下午3']
rooms = ['教室1', '教室2', '教室3', '教室4', '教室5', '教室6']
classes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
ROOM = 'room'
TIME = 'time'
CLASS = 'class'
CHOOSE = 'choose'
WEEK_DAY = 'week_day'
def class_sort(week_day):
everyday = []
for i in range(len(rooms)):
for j in range(len(times)):
p = {ROOM: rooms[i], TIME: times[j]}
everyday.append(p)
seed = [i for i in range(30)]
ids = sorted(random.sample(seed, 15))
grade = 1
for id in ids:
everyday[id][CLASS] = grade
grade = grade + 1
everyday[id][CHOOSE] = True
everyday[id][WEEK_DAY] = week_day
for ed in everyday:
try:
if ed[CHOOSE]:
print(ed, end='')
except:
pass
print()
if __name__ == '__main__':
for i in range(4):
class_sort(i + 2)
输出:
{'room': '教室1', 'time': '上午3', 'class': 1, 'choose': True, 'week_day': 2}{'room': '教室1', 'time': '下午2', 'class': 2, 'choose': True, 'week_day': 2}{'room': '教室1', 'time': '下午3', 'class': 3, 'choose': True, 'week_day': 2}{'room': '教室2', 'time': '上午3', 'class': 4, 'choose': True, 'week_day': 2}{'room': '教室2', 'time': '下午1', 'class': 5, 'choose': True, 'week_day': 2}{'room': '教室2', 'time': '下午3', 'class': 6, 'choose': True, 'week_day': 2}{'room': '教室3', 'time': '上午1', 'class': 7, 'choose': True, 'week_day': 2}{'room': '教室3', 'time': '上午3', 'class': 8, 'choose': True, 'week_day': 2}{'room': '教室3', 'time': '上午4', 'class': 9, 'choose': True, 'week_day': 2}{'room': '教室4', 'time': '上午1', 'class': 10, 'choose': True, 'week_day': 2}{'room': '教室4', 'time': '上午2', 'class': 11, 'choose': True, 'week_day': 2}{'room': '教室4', 'time': '上午4', 'class': 12, 'choose': True, 'week_day': 2}{'room': '教室4', 'time': '下午2', 'class': 13, 'choose': True, 'week_day': 2}{'room': '教室4', 'time': '下午3', 'class': 14, 'choose': True, 'week_day': 2}{'room': '教室5', 'time': '上午2', 'class': 15, 'choose': True, 'week_day': 2}
{'room': '教室1', 'time': '上午1', 'class': 1, 'choose': True, 'week_day': 3}{'room': '教室1', 'time': '上午2', 'class': 2, 'choose': True, 'week_day': 3}{'room': '教室1', 'time': '下午1', 'class': 3, 'choose': True, 'week_day': 3}{'room': '教室1', 'time': '下午2', 'class': 4, 'choose': True, 'week_day': 3}{'room': '教室1', 'time': '下午3', 'class': 5, 'choose': True, 'week_day': 3}{'room': '教室2', 'time': '上午1', 'class': 6, 'choose': True, 'week_day': 3}{'room': '教室2', 'time': '下午1', 'class': 7, 'choose': True, 'week_day': 3}{'room': '教室3', 'time': '下午1', 'class': 8, 'choose': True, 'week_day': 3}{'room': '教室3', 'time': '下午2', 'class': 9, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '上午1', 'class': 10, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '上午4', 'class': 11, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '下午1', 'class': 12, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '下午2', 'class': 13, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '下午3', 'class': 14, 'choose': True, 'week_day': 3}{'room': '教室5', 'time': '上午2', 'class': 15, 'choose': True, 'week_day': 3}
{'room': '教室1', 'time': '上午1', 'class': 1, 'choose': True, 'week_day': 4}{'room': '教室1', 'time': '上午3', 'class': 2, 'choose': True, 'week_day': 4}{'room': '教室1', 'time': '上午4', 'class': 3, 'choose': True, 'week_day': 4}{'room': '教室1', 'time': '下午3', 'class': 4, 'choose': True, 'week_day': 4}{'room': '教室2', 'time': '上午1', 'class': 5, 'choose': True, 'week_day': 4}{'room': '教室2', 'time': '上午4', 'class': 6, 'choose': True, 'week_day': 4}{'room': '教室2', 'time': '下午1', 'class': 7, 'choose': True, 'week_day': 4}{'room': '教室3', 'time': '上午2', 'class': 8, 'choose': True, 'week_day': 4}{'room': '教室3', 'time': '上午3', 'class': 9, 'choose': True, 'week_day': 4}{'room': '教室3', 'time': '下午1', 'class': 10, 'choose': True, 'week_day': 4}{'room': '教室3', 'time': '下午2', 'class': 11, 'choose': True, 'week_day': 4}{'room': '教室3', 'time': '下午3', 'class': 12, 'choose': True, 'week_day': 4}{'room': '教室4', 'time': '上午4', 'class': 13, 'choose': True, 'week_day': 4}{'room': '教室4', 'time': '下午2', 'class': 14, 'choose': True, 'week_day': 4}{'room': '教室4', 'time': '下午3', 'class': 15, 'choose': True, 'week_day': 4}
{'room': '教室1', 'time': '上午2', 'class': 1, 'choose': True, 'week_day': 5}{'room': '教室1', 'time': '下午2', 'class': 2, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '上午2', 'class': 3, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '上午3', 'class': 4, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '上午4', 'class': 5, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '下午2', 'class': 6, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '下午3', 'class': 7, 'choose': True, 'week_day': 5}{'room': '教室3', 'time': '上午1', 'class': 8, 'choose': True, 'week_day': 5}{'room': '教室3', 'time': '上午4', 'class': 9, 'choose': True, 'week_day': 5}{'room': '教室3', 'time': '下午2', 'class': 10, 'choose': True, 'week_day': 5}{'room': '教室4', 'time': '上午1', 'class': 11, 'choose': True, 'week_day': 5}{'room': '教室4', 'time': '上午2', 'class': 12, 'choose': True, 'week_day': 5}{'room': '教室4', 'time': '下午2', 'class': 13, 'choose': True, 'week_day': 5}{'room': '教室4', 'time': '下午3', 'class': 14, 'choose': True, 'week_day': 5}{'room': '教室5', 'time': '上午1', 'class': 15, 'choose': True, 'week_day': 5}
因为是随机生成,所以每次跑出的结果不相同:
{'room': '教室1', 'time': '上午3', 'class': 1, 'choose': True, 'week_day': 2}{'room': '教室1', 'time': '上午4', 'class': 2, 'choose': True, 'week_day': 2}{'room': '教室1', 'time': '下午2', 'class': 3, 'choose': True, 'week_day': 2}{'room': '教室2', 'time': '上午1', 'class': 4, 'choose': True, 'week_day': 2}{'room': '教室2', 'time': '下午2', 'class': 5, 'choose': True, 'week_day': 2}{'room': '教室3', 'time': '上午1', 'class': 6, 'choose': True, 'week_day': 2}{'room': '教室3', 'time': '上午2', 'class': 7, 'choose': True, 'week_day': 2}{'room': '教室3', 'time': '上午3', 'class': 8, 'choose': True, 'week_day': 2}{'room': '教室3', 'time': '上午4', 'class': 9, 'choose': True, 'week_day': 2}{'room': '教室3', 'time': '下午1', 'class': 10, 'choose': True, 'week_day': 2}{'room': '教室4', 'time': '上午1', 'class': 11, 'choose': True, 'week_day': 2}{'room': '教室4', 'time': '上午4', 'class': 12, 'choose': True, 'week_day': 2}{'room': '教室4', 'time': '下午3', 'class': 13, 'choose': True, 'week_day': 2}{'room': '教室5', 'time': '上午1', 'class': 14, 'choose': True, 'week_day': 2}{'room': '教室5', 'time': '上午2', 'class': 15, 'choose': True, 'week_day': 2}
{'room': '教室1', 'time': '上午2', 'class': 1, 'choose': True, 'week_day': 3}{'room': '教室1', 'time': '上午3', 'class': 2, 'choose': True, 'week_day': 3}{'room': '教室1', 'time': '上午4', 'class': 3, 'choose': True, 'week_day': 3}{'room': '教室2', 'time': '上午2', 'class': 4, 'choose': True, 'week_day': 3}{'room': '教室2', 'time': '下午1', 'class': 5, 'choose': True, 'week_day': 3}{'room': '教室2', 'time': '下午3', 'class': 6, 'choose': True, 'week_day': 3}{'room': '教室3', 'time': '上午1', 'class': 7, 'choose': True, 'week_day': 3}{'room': '教室3', 'time': '上午3', 'class': 8, 'choose': True, 'week_day': 3}{'room': '教室3', 'time': '下午2', 'class': 9, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '上午1', 'class': 10, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '上午3', 'class': 11, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '上午4', 'class': 12, 'choose': True, 'week_day': 3}{'room': '教室4', 'time': '下午2', 'class': 13, 'choose': True, 'week_day': 3}{'room': '教室5', 'time': '上午1', 'class': 14, 'choose': True, 'week_day': 3}{'room': '教室5', 'time': '上午2', 'class': 15, 'choose': True, 'week_day': 3}
{'room': '教室1', 'time': '下午1', 'class': 1, 'choose': True, 'week_day': 4}{'room': '教室1', 'time': '下午2', 'class': 2, 'choose': True, 'week_day': 4}{'room': '教室2', 'time': '上午1', 'class': 3, 'choose': True, 'week_day': 4}{'room': '教室2', 'time': '上午3', 'class': 4, 'choose': True, 'week_day': 4}{'room': '教室2', 'time': '上午4', 'class': 5, 'choose': True, 'week_day': 4}{'room': '教室2', 'time': '下午1', 'class': 6, 'choose': True, 'week_day': 4}{'room': '教室2', 'time': '下午3', 'class': 7, 'choose': True, 'week_day': 4}{'room': '教室3', 'time': '上午3', 'class': 8, 'choose': True, 'week_day': 4}{'room': '教室3', 'time': '上午4', 'class': 9, 'choose': True, 'week_day': 4}{'room': '教室3', 'time': '下午1', 'class': 10, 'choose': True, 'week_day': 4}{'room': '教室4', 'time': '上午1', 'class': 11, 'choose': True, 'week_day': 4}{'room': '教室4', 'time': '上午3', 'class': 12, 'choose': True, 'week_day': 4}{'room': '教室4', 'time': '下午1', 'class': 13, 'choose': True, 'week_day': 4}{'room': '教室4', 'time': '下午3', 'class': 14, 'choose': True, 'week_day': 4}{'room': '教室5', 'time': '上午2', 'class': 15, 'choose': True, 'week_day': 4}
{'room': '教室1', 'time': '上午2', 'class': 1, 'choose': True, 'week_day': 5}{'room': '教室1', 'time': '上午3', 'class': 2, 'choose': True, 'week_day': 5}{'room': '教室1', 'time': '上午4', 'class': 3, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '上午1', 'class': 4, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '上午2', 'class': 5, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '上午3', 'class': 6, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '上午4', 'class': 7, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '下午2', 'class': 8, 'choose': True, 'week_day': 5}{'room': '教室2', 'time': '下午3', 'class': 9, 'choose': True, 'week_day': 5}{'room': '教室3', 'time': '上午1', 'class': 10, 'choose': True, 'week_day': 5}{'room': '教室3', 'time': '上午4', 'class': 11, 'choose': True, 'week_day': 5}{'room': '教室3', 'time': '下午1', 'class': 12, 'choose': True, 'week_day': 5}{'room': '教室4', 'time': '上午1', 'class': 13, 'choose': True, 'week_day': 5}{'room': '教室4', 'time': '上午4', 'class': 14, 'choose': True, 'week_day': 5}{'room': '教室5', 'time': '上午1', 'class': 15, 'choose': True, 'week_day': 5}