大学社团自动排班

背景

随着改革开放的迅速推进,科技和经济迅猛发展,大学生的业余生活也逐渐丰富起来。为了响应时代的号召,充分发挥大学生的想象力和创造力,各种兴趣社团和学生组织应运而生,随着组织形式的不断纪律化,有一个叫“值班”的东西诞生了。
有值班便自然要排班,而社团组织大多跨专业,成员课表不统一,再加可能会有临时情况需调班,这给排班人员增加了不少负担。本人本学期负责排班工作,特写了一段Python代码实现自动排班。

需求分析

  • 每周5天,每天4班,每班起始及结束时间同对应的上课时间
  • 每人每周值4次班,班次无差
  • 允许为某人指定班次(未完成)
  • 如有人临时有事,可以本周此时间节点之后的班次内进行微调班(未完成)

源代码

import xlwings as xw
import random

# 创建2个Excel表格,排班结果在第一个表中输出,提前在第二个中输入各值班人员的课表
# 第一行为周一至周五,第一列为班次一到班次四,把对应时间段有课的值班人员的名字手打到对应单元格中
# 导入该Excel表格并圈定操作范围
fp = "C:\\Users\\Ahou\\Desktop\\madebyhou.xlsx"
wb = xw.Book(fp)
sheet = wb.sheets[1]
sheet_des = wb.sheets[0]
col_title = sheet_des.range("B1:F1")
row_title = sheet_des.range("A2:A5")
sheet.range("A1").value = "第四周"
wod = ["一", "二", "三", "四", "五"]
for _, e in enumerate(col_title):
    e.value = "星期{}".format(wod[_])
for _, e in enumerate(row_title):
    e.value = f"第大{wod[_]}节"

# 全体值班人员名单
list_of_students = ["叶凡", "姬紫月", "庞博", "龙小雀", "颜如玉", "安妙依", "秦瑶", "华云飞", "姜太虚", "段德", "夏九幽"] * 4
list_index = []
content_range = sheet.range("B2:F5")
# 执行排班操作
for i in content_range:
    current_list = []
    while len(current_list) < 2:
        j = int(random.random() * 44)
        if j not in list_index:
            if list_of_students[j] not in i:
                list_index.append(j)
                current_list.append(list_of_students[j])
    sheet_des.range(i.address).value = "、".join(current_list)
# 保存表格
wb.save()

致谢

  • 感谢舍友最后的完善
  • 感谢大家的观看
  • 感谢自己以后免去手动排班之苦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值