【分班】S型分班 python


```python
from openpyxl import load_workbook
import pandas as pd 
# S形分班函数
def class_trans(row,class_num):
    if row < class_num:
        return row
    else:
        return class_num*2 - row-1


wb=load_workbook(filename=r'C:/Users/lenovo/Desktop/2021新生录取信息汇总.xlsx', data_only=True)
ws=wb['Sheet1']

class_num = int(input('请输入班级数量:'))

nograde_male=0 #没成绩的男生
nograde_female=0  #没成绩的女生
grade_male=0 #有成绩的男生
grade_female=0  #有成绩的女生

#为每一个班级创建一个sheet
for i in range(class_num):
    wb.create_sheet('class'+str(i))

#为每一个班级创建一个记录人数的数组
list=[1 for col in range(class_num)]
print(list)

max_row = ws.max_row
max_column = ws.max_column

for i in range(3,max_row+2):
    cell = ws.cell(row=i,column=28)
    print('DEBUG:iterating: %s' %(ws.cell(row=i,column=9).value))
    if(cell.value !='#N/A' and ws.cell(row=i,column=10).value=='女'):
        class_val=class_trans(grade_female,class_num)
        ws1=wb['class'+str(class_val)]
        row=ws[i]
        temp=1
        for cell in row:
            ce=ws1.cell(row=list[class_val],column=temp)
            ce.value = cell.value
            temp = temp+1
        list[class_val] = list[class_val]+1
        grade_female = (grade_female+1) % (class_num*2)

#男生

grade_male = class_num

for i in range(3,max_row+2):
    cell = ws.cell(row=i,column=28)
    print('DEBUG:iterating: %s' %(ws.cell(row=i,column=9).value))
    if(cell.value !='#N/A' and ws.cell(row=i,column=10).value=='男'):
        class_val=class_trans(grade_male,class_num)
        ws1=wb['class'+str(class_val)]
        row=ws[i]
        temp=1
        for cell in row:
            ce=ws1.cell(row=list[class_val],column=temp)
            ce.value = cell.value
            temp = temp+1
        list[class_val] = list[class_val]+1
        grade_male = (grade_male+1) % (class_num*2)

print(grade_male,grade_female)
print(list)

wb.save('C:/Users/lenovo/Desktop/res5.xlsx')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值