(Pueden ser necesarios asistente) estadísticas sobre el equipo de primer nivel de agrupación de

Ideas: muy simple. En primer nombre y el número de estudiante de todos los estudiantes leer de la lista de estudiantes a diccionario dict archivo de Excel, y los estudiantes del estado dict diccionario crear, guardar para agrupar a los estudiantes se encuentran en ningún estado. A continuación, lea línea por línea los equipos de agrupación archivo de Excel, el diccionario dict Estado alumnos conjunto.

import re
import xlrd

##################### 班级名单读取 #####################

all_stud=xlrd.open_workbook(r'计算机视觉选课名单.xls')
all_stud_sheet1 = all_stud.sheets()[0]

num_to_name = dict() # 学号转换为姓名
stud_state = dict() # 学生分组状况

for i in range(all_stud_sheet1.nrows):
    tmp = str(all_stud_sheet1.cell(i,1).value)
    if (re.match(r'\d{12}', tmp) != None):
        name = str(all_stud_sheet1.cell(i,2).value)
        num = tmp
        num_to_name[num] = name
        stud_state[num] = 0

assert (len(num_to_name) == len(stud_state))

##################### 小组分组情况统计 #####################

group_excel=xlrd.open_workbook(r'小组分组 - 详细版.xlsx')
group_sheet1 = group_excel.sheets()[0]

not_in_class = []
repeat_join = []
joined_num = 0
group_num = 0

for i in range(group_sheet1.nrows): # 遍历每个小组成员
    if (i == 0):
        continue;
    tmp1 = str(group_sheet1.cell(i,1).value)
    tmp2 = str(group_sheet1.cell(i,2).value)
    
    if (tmp1 == "" and tmp2 == ""):
        continue
    
    nam = tmp1
    num = tmp2

    group_num += 1
    
    if (num == "" or nam == "" or num not in stud_state.keys()): # 不在班级里的人
        not_in_class.append([num, nam])
    elif (stud_state[num] != 0): # 重复加入小组的人
        repeat_join.append([num, nam])
    else: # 未加入的人
        stud_state[num] = 1
        joined_num += 1

not_joined_num = 0
not_joined = []
for num in stud_state.keys():
    if (stud_state[num] == 0):
        not_joined_num += 1
        not_joined.append([num, num_to_name[num]])

assert(len(stud_state) == joined_num + not_joined_num)


print ("##################### 班级名单中的情况 #####################")
print ()
print ("班级总人数:" + str(len(stud_state)))
print ("班级中,已分组人数:" + str(joined_num))
print ("班级中,未分组人数:" + str(not_joined_num))
print ()
print ("未参与分组的人如下:")
for mem in not_joined:
    print (mem)
print ()
print ("##################### 小组分组的情况 #####################")
print ()
print ("参与分组总人数:" + str(group_num))
print ("在班级中的人数:" + str(joined_num))
print ("不在班级中的人数:" + str(len(not_in_class)))
print ()
print ("不在班级中的人如下:")
for  mem in not_in_class:
    print (mem)
print ()
print ("重复分组的人数:" + str(len(repeat_join)))
print ()
print ("重复分组的人如下:")
for  mem in repeat_join:
    print (mem)
    

Publicado 92 artículos originales · ganado elogios 2 · Vistas 3412

Supongo que te gusta

Origin blog.csdn.net/zxc120389574/article/details/105132637
Recomendado
Clasificación