python实现学生座位表排表

您所在的位置:网站首页 学生座位表如何制作 python实现学生座位表排表

python实现学生座位表排表

2024-07-17 18:17| 来源: 网络整理| 查看: 265

最近一位当老师的朋友说能不能整个学生座位表的软件,每次手动排太烦了,于是他说了需求: 1.男生和男生坐在一起,女生和女生坐在一起,成绩好坏随机排 2.总共九列七排,(其实规定9列之后排数不重要,依次往后续上就可以了) 基于这两个要求还是很好实现的,就随手给他整了一个,主要还是用的xlwt和xlrd这两个库来处理xls表格,感觉写的匆忙,很多优化的方便都没来得及处理,欢迎大家随时指正,下面展示一下代码片部分,供参考

filepath=os.path.abspath(os.curdir) #获取当前文件的目录 def readfile(file): work_book = xlrd.open_workbook(file) #打开工作表(学生信息表) sheet_1 = work_book.sheets()[0] #打开表格1 # print(sheet_1) col_num = int(sheet_1.ncols) #获取学生表的列数和行数 row_num = int(sheet_1.nrows) name_list_m = [] #男生姓名列表 name_list_w = [] #女生姓名列表 # sex=sheet_1.cell_value(1,1) # print(sex) #注意此处默认文件第一行为属性值:姓名,性别等等 for i in range(row_num): if i == 0: continue sex = sheet_1.cell_value(i, 1) #这里因为表格固定第二列为性别,所以讲列数写死 name = sheet_1.cell_value(i, 0) #获取当前学生姓名 if sex == 0: #如果性别男,则放入一组等待排序,0表示男性,1表示女性 name_list_m.append(name) else: #女生放入一组等待排序 name_list_w.append(name) lenm = len(name_list_m) #男生总人数 lenw = len(name_list_w) #女生总人数

上面的片段即实现了将表格男女生分开,放入列表中,下面就是讲男女生分组了,三人一小组,每一排三个小组

new_m = [] #先新建两个列表,代表参与分组的学生 new_w = [] for i in range(int(lenm / 3)): #对男生进行分配,每三人一组 a = random.sample(name_list_m, 3) # 这里是对男生列表进行随机不重复取3个值,并放入新的列表中 new_m.append(a) #将参与分组的学生移除之前的列表,这样剩下的学生就是未能参与分组的 for j in range(len(a)): name_list_m.remove(a[j]) for i in range(int(lenw / 3)): a = random.sample(name_list_w, 3) new_w.append(a) for j in range(len(a)): name_list_w.remove(a[j]) alllist = new_w + new_m #男女生总的分组列表合在一起

至此第一部分结束,将男女生分组 分别已经随机排序,下面将男女组随机排列写入新的表格中

f = xlwt.Workbook() sheet_2 = f.add_sheet("座位表0", cell_overwrite_ok=False)#新建座位表 #sheet_3 = f.add_sheet("座位表", cell_overwrite_ok=False) # 这里对之前男女生列表进行随机排列并加入新列表里 lenall = len(alllist) new_all = [] for i in range(lenall): list0 = random.sample(alllist, 1) #在总的分组中随机取出一组加入新列表,同时在原列表中移除 new_all.append(list0[0]) alllist.remove(list0[0]) print(new_all) #新的随机分组 list_name = [] #这里将分组完毕的学生全都依次排列 for i in range(lenall): #获取分组总长度 for j in range(len(new_all[i])): #获取分组中每一个小的分组长度 list_name.append(new_all[i][j]) #取出每一个对应的学生名 print(len(list_name)) #参与分组总人数 # 将之前未能拼成三人一组的学生加入列表 if name_list_w==[]: pass else: for i in range(len(name_list_w)): list_name.append(name_list_w[i]) if name_list_m==[]: pass else: for i in range(len(name_list_m)): list_name.append(name_list_m[i])

最后将数据写入表格:

it = iter(list_name) #这里用了生成器函数,用next()一次取出每一个值 len0 = len(list_name) while True: try: for i in range(int(len0 / 9 + 1)): for j in range(9): sheet_2.write(i, j, next(it)) # sheet_3.write(i, j, next(it)) except StopIteration: break f.save(file)

之后看一下运行效果和实践效果,代码已打包 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3