2021-04-21

实验目的:初次属性python处理数据(将数据写入excel文件中)

任务:教师奖励性工作量

已知初一某班招收了60个学生学生,从初一到初三的教师不变。其中语文、数学、英语、地理、历史、政治、体育、音乐、画画,在初一开设,物理在初二开设、化学在初三开设。

为了更好的激励老师,给重要考试给与奖励(初一、初二的期中、期末考试,初三月考及中考),其中对于语文、数学、外语的老师:如果一个学生成绩90分以上,教师奖励1个工作量,一个学生成绩超过80分,奖励教师0.3个工作量,如果一个学生成绩低于60分,扣除0.1个工作量。其他科目的老师:如果一个学生成绩90分以上,教师奖励0.3个工作量,一个学生成绩超过80分,奖励教师0.1个工作量,如果一个学生成绩低于60分,扣除0.1个工作量。特别是中考成绩需要特别奖励,考起师大附中和南昌二中的,一个学生奖励1000个工作量,按各科成绩所占比率分配给任课老师,其他不给与惩罚。

 

  1. 写一个学生生成函数:学号(唯一,三年不变,比如2021年入学,学号为2021001-202160)、姓名;
  2. 写一个教师生成函数:工号(不变,唯一)、姓名;
  3. 写一个函数,模拟某门课程考试,考试成绩保存到excel文件中,用来给任课老师平时分析和总结。

第4题作答,你的学号3,余数为1的做第4.1,余数为2的做第4.2题,余数为0的做第4.3:

  1. 写一个初一、初二期中考试、期末考试函数,生成文件保存到excel文件中,但考虑到管理问题,需要进行不同的处理,同学们根据自己的情况作答。

  如果学校管理严格,有1%以下的学生向下波动,有5%的学生向上波动;

  1. 写一个初三考试函数,生成月考、中考,生成文件保存到excel文件中;
  2. 统计各个老师的工作量,生成excel文件;
  3. 将前5名用柱状图表示出来.

参考数据:

  某年某个班同学在6年级的成绩分布:

  1. 英语90分以上的同学有20个,数学为:18个,语文:12个,体育:50个;音乐:58个,画画:52个,政治:30个,历史:45个。
  2. 这是管理相对严格的情况下,近4年师大附中和南昌二中人数:

15(6,9)

16(7,9)

13(5,8)

14(6,8)

  1. 师大附中录取9年基本分数在90%,比如830分的试卷,747分,南昌二中为:86%以上。
  2. 语文、英语、数学各120分,物理:70、化学:70:政治:100;生物:50;体育:70;画画:30;音乐:30;地理:50,历史70分   总分为:900
    import random as rm
    import xlwt
    import xlrd
    import copy
    import matplotlib
    import matplotlib.pyplot as plt
    import numpy as np
    def CreateName():
        """
        随机生成姓名
        :return:
        """
        xing = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任柳"
        ming = "仪正礼奉承渊原建阳谧彦靖廙敬礼禁文则士孙瑞君荣山涛巨源瓘伯玉磾翁叔良季常忠德信超孟起谡幼常成允子师双子全平子均匡公节戎睿冲观伟台甫国舒撒法胡桃将爱情国环境"
        xingbiao = rm.randint(0, len(xing) - 1)
        mingbiao = rm.randint(0, len(ming) - 1)
        name = str(xing[xingbiao]) + str(ming[mingbiao])
        a = rm.randint(1, 3)
        if a >= 1:
            mingbiao2 = rm.randint(0, len(ming) - 1)
            name += str(ming[mingbiao2])
        return name
        xing=list(xing)
        ming=ming.split("、")
        lengthxing=len(xing)
        lenming=len(ming)
        temp=rm.randint(0,lengthxing)
        Nx=xing[temp]
        Nn=""
        for i in range(2):
            temp=rm.randint(0,lenming-1)
            Nn=Nn+ming[temp]
        Name=Nx+Nn
        return Name
    
    def create_student(n):
        """
        创造学生列表
        有俩个属性,名字,学号
        n代表创建的个数
        :param n:
        :return:
        """
        students=[]
        # sex = ["男", "女"]
        for i in range(n):
            student=[]
            Name = CreateName()
            student.append(Name)
            num = 2021000
            Num = rm.randint(1,999)
            num+=Num
            student.append(num)
            b = rm.randint(0,100)
            students.append(student)
        return students
    
    def create_teacher(n):
        """
        创造老师表
        :param n:
        :return:
        """
        teachers=[]
        for i in range(n):
            teacher = []
            Number = rm.randint(10000, 20000)
            teacher.append(Number)
            Name = CreateName()
            teacher.append(Name)
            if i==0:
                teacher.append("语文")
                teacher.append(0)
            elif i==1:
                teacher.append("数学")
                teacher.append(0)
            elif i==2:
                teacher.append("英语")
                teacher.append(0)
            elif i==3:
                teacher.append("物理")
                teacher.append(0)
            elif i==4:
                teacher.append("化学")
                teacher.append(0)
            elif i==5:
                teacher.append("地理")
                teacher.append(0)
            elif i==6:
                teacher.append("生物")
                teacher.append(0)
            elif i==7:
                teacher.append("历史")
                teacher.append(0)
            elif i==8:
                teacher.append("政治")
                teacher.append(0)
            elif i==9:
                teacher.append("体育")
                teacher.append(0)
            elif i==10:
                teacher.append("音乐")
                teacher.append(0)
            elif i==11:
                teacher.append("绘画")
                teacher.append(0)
    
            teachers.append(teacher)
        return teachers
    
    def test_student3(grade2): #最开始随机生成一组初三学生成绩,之后的考试成绩都是根据最开始生成数据进行波动的
        """
        根据传入初二学生成绩的基础上
        对已经有的科目进行上下随机波动
        对新加入的化学科目进行随机取值
        :param grade2:
        :return:
        """
        students_grade = []
        for i in range(len(grade2)):
            student_grade = []
            for j in range(len(grade2[i]) + 1):
                if j <= 2:
                    grade = grade2[i][j] + rm.randint(-3, 3)
                    if (grade > 120):
                        grade = 120
                    student_grade.append(grade)
                elif j == 3:
                    grade = grade2[i][j] + rm.randint(-3, 3)
                    if (grade > 70):
                        grade = 70
                    student_grade.append(grade)
                elif j == 4:
                    grade = rm.randint(50, 70)
                    student_grade.append(grade)
                elif j==5 or j==6:
                    grade = grade2[i][j - 1] + rm.randint(-3, 3)
                    if (grade > 50):
                        grade = 50
                    student_grade.append(grade)
                elif j==7 or j==9:
                    grade = grade2[i][j - 1] + rm.randint(-3, 3)
                    if (grade > 70):
                        grade = 70
                    student_grade.append(grade)
                elif j==8:
                    grade = grade2[i][j - 1] + rm.randint(-3, 3)
                    if (grade > 100):
                        grade = 100
                    student_grade.append(grade)
                elif j == 10 or j == 11:
                    grade = grade2[i][j - 1] + rm.randint(-3, 3)
                    if (grade > 30):
                        grade = 30
                    student_grade.append(grade)
            students_grade.append(student_grade)
        return students_grade
    def test_student2(grade1):
        """
        根据传入初一学生成绩的基础上
        对已经有的科目进行上下随机波动
        对新加入的物理科目进行随机取值
        :param grade1:
        :return:
        """
        students_grade=[]
        for i in range(len(grade1)):
            student_grade = []
            for j in range(len(grade1[i])+1):
                if j <=2:
                    grade=grade1[i][j]+rm.randint(-3,3)
                    if(grade>120):
                        grade=120
                    student_grade.append(grade)
                elif j==3:
                    grade=rm.randint(50,70)
                    student_grade.append(grade)
                elif j==4 or j==5:
                    grade=grade1[i][j-1]+rm.randint(-3,3)
                    if (grade > 50):
                        grade = 50
                    student_grade.append(grade)
                elif j==6 or j==8:
                    grade = grade1[i][j - 1] + rm.randint(-3, 3)
                    if (grade > 70):
                        grade = 70
                    student_grade.append(grade)
                elif j==7:
                    grade = grade1[i][j - 1] + rm.randint(-3, 3)
                    if (grade > 100):
                        grade = 100
                    student_grade.append(grade)
                elif j==9 or j==10:
                    grade = grade1[i][j - 1] + rm.randint(-3, 3)
                    if (grade > 30):
                        grade = 30
                    student_grade.append(grade)
    
    
    
    
            #     if j==0 or j==1 or j== 2:
            #         grade = rm.randint(78, 108)
            #         student_grade.append(grade)
            #     if j==3  or j==6 or j==8:
            #         grade=rm.randint(50,70)
            #         student_grade.append(grade)
            #     if j== 4 or  j==5 :
            #         grade=rm.randint(35,50)
            #         student_grade.append(grade)
            #     if j==7:
            #         grade=rm.randint(68,95)
            #         student_grade.append(grade)
            #     if j==9 or j== 10:
            #         grade=rm.randint(23,30)
            #         student_grade.append(grade)
            students_grade.append(student_grade)
        return students_grade
    
    
    def test_student1(n):
        """随机生成n个初一学生的考试成绩"""
        students_grade = []
        for i in range(n):
            student_grade = []
            for j in range(10):
                # grade=rm.randint(70,92)
                # student_grade.append(grade)
                if j == 0 or j == 1 or j == 2:
                    grade = rm.randint(78, 108)
                    student_grade.append(grade)
                if  j == 5 or j == 7:
                    grade = rm.randint(50, 70)
                    student_grade.append(grade)
                if j == 3 or j == 4:
                    grade = rm.randint(35, 50)
                    student_grade.append(grade)
                if j == 6:
                    grade = rm.randint(68, 95)
                    student_grade.append(grade)
                if j == 8 or j == 9:
                    grade = rm.randint(23, 30)
                    student_grade.append(grade)
            students_grade.append(student_grade)
        return students_grade
    
    
            # for j in range(12):
            #     if j <= 2:
            #        student_grade[i][j]=int(student_grade[i][j]*1.2)
            #     if j==3 |j==4 | j==7| j==9:
            #
            #         student_grade[i][j] = int(student_grade[i][j] * 0.7)
            #     if j== 5 | j==6 :
            #
            #         student_grade[i][j] = int(student_grade[i][j] * 0.2)
            #     if j==8:
            #
            #         student_grade[i][j] = int(student_grade[i][j] * 1.0)
            #     if j==10 | j==11:
            #
            #         student_grade[i][j] = int(student_grade[i][j] * 0.3)
            #
            # for k in range(len(students_grade)):
            #     print(student_grade[k])
    
    
    def test_studentnext(students_grade):
        """
        #学校管理严格,有1%以下的学生向下波动,有5%的学生向上波动
        :param students_grade:
        :return:
        """
        students_gradenext=[]
        for i in range(len(students_grade)):
            student_gradenext=[]
            for j in range(len(students_grade[i])):
                n=rm.random()*100
                if n<=5:        #百分之5的人成绩上升
                    grade=students_grade[i][j]
                    num=rm.randint(10,15)
                    grade=grade+num
                    if grade>100:
                        grade=100
                    student_gradenext.append(grade)
                elif n>=99:   #百分之1的人成绩下降
                    grade=students_grade[i][j]
                    num=rm.randint(10,15)
                    grade=grade-num
                    student_gradenext.append(grade)
                else:  #其余人在自身成绩基础上进行小范围上下波动
                    grade=students_grade[i][j]
                    grade += rm.randint(-3,3)
                    student_gradenext.append(grade)
            students_gradenext.append(student_gradenext)
        return students_gradenext
    
    def write_excel3(students,studentsgrade,name,theme,co,to):
        """
        通用的打印表单格式,便于代码复用
        student是学生信息队列
        studentsgrade是学生成绩队列
        name是表名
        theme是各个表的第一行属性的名字
        co,to负责调整数据从第几行第几列导入
        :param students:
        :param studentsgrade:
        :param name:
        :param theme:
        :param co:
        :param to:
        :return:
        """
        wb = xlwt.Workbook(encoding="utf-8")
        s = wb.add_sheet(name)
        style = xlwt.XFStyle()
        font = xlwt.Font()
        font.bold = True
        font.height = 300
        font.colour_index = 4
        alignment = xlwt.Alignment()
        alignment.horz = xlwt.Alignment.HORZ_CENTER
        alignment.vert = xlwt.Alignment.VERT_CENTER
        style.font = font
        style.alignment = alignment
        # s.write_merge(0,2,0,2,"江西财经大学附属中学老师评测表",style)
        s.write_merge(0,2,0,to,name,style)
        # for u in range(len(theme)):
        #     s.write(3,u,theme[u])
        for k in range(len(theme)):
            s.write(3, k, theme[k])
        for i in range(len(students)):
            for j in range(len(students[i])+len(studentsgrade[i])):
                if(j<=1):
                    s.write(i+co, j, students[i][j])
                else:
                    s.write(i+co,j,studentsgrade[i][j-2])
        wb.save(name+".xls")
    
    def write_excel4(students,studentsgrade,name,theme,co,to):
        """
        通用的打印表单格式,便于代码复用
        student是学生信息队列
        studentsgrade是学生成绩队列
        name是表名
        theme是各个表的第一行属性的名字
        co,to负责调整数据从第几行第几列导入
        :param students:
        :param studentsgrade:
        :param name:
        :param theme:
        :param co:
        :param to:
        :return:
        """
        wb = xlwt.Workbook(encoding="utf-8")
        s = wb.add_sheet(name)
        style = xlwt.XFStyle()
        font = xlwt.Font()
        font.bold = True
        font.height = 300
        font.colour_index = 4
        alignment = xlwt.Alignment()
        alignment.horz = xlwt.Alignment.HORZ_CENTER
        alignment.vert = xlwt.Alignment.VERT_CENTER
        style.font = font
        style.alignment = alignment
        # s.write_merge(0,2,0,2,"江西财经大学附属中学老师评测表",style)
        s.write_merge(0,2,0,to,name,style)
        # for u in range(len(theme)):
        #     s.write(3,u,theme[u])
        for k in range(len(theme)):
            s.write(3, k, theme[k])
        s.write(3,14,"总分")
        for i in range(len(students)):
            for j in range(len(students[i])+len(studentsgrade[i])):
                if(j<=1):
                    s.write(i+co, j, students[i][j])
                else:
                    s.write(i+co,j,studentsgrade[i][j-2])
    
        for i in range(len(students)):
            num=0
            for j in range(len(studentsgrade[i])):
                num += studentsgrade[i][j]
            s.write(i+co,14,num)
    
        wb.save(name+".xls")
    
    
    # def test_chusan(students,student_grade2):
    #     students_grade3 = test_studentnext(students_grade2)  # student_grade3月考
    #     students_grade4=test_studentnext(students_grade3)   #student_grade4为中考
    #     write_excel3(students, students_grade3, "月考成绩", theme, 4, 13)
    #     write_excel3(students, students_grade4, "中考成绩", theme, 4, 13)
    
    
    
    
    
    def writeTermExam1(students,testgrade11,testgrade12,testgrade13,testgrade14):
        '''
        模拟初一期中、期末考试
        并将所有数据整合在一张表里
        :return:
        '''
        wb = xlwt.Workbook(encoding="utf-8")
        ws = wb.add_sheet("ScoreTable")
        style = xlwt.XFStyle()
        font = xlwt.Font()
        font.bold = True
        font.height = 300
        font.colour_index = 4
        alignment = xlwt.Alignment()
        alignment.horz = xlwt.Alignment.HORZ_CENTER
        alignment.vert = xlwt.Alignment.VERT_CENTER
        style.font = font
        style.alignment = alignment
        ws.write_merge(0, 2, 0, 12, "初一学生期中期末成绩表", style)
        ws.write_merge(3, 4, 0, 0, "姓名", style)
        ws.write_merge(3, 3, 1, 4, "语文", style)
        ws.write_merge(3, 3, 5, 8, "数学", style)
        ws.write_merge(3, 3, 9, 12, "英语", style)
        ws.write_merge(3, 3, 13, 16, "地理", style)
        ws.write_merge(3, 3, 17, 20, "生物", style)
        ws.write_merge(3, 3, 21, 24, "历史", style)
        ws.write_merge(3, 3, 25, 28, "政治", style)
        ws.write_merge(3, 3, 29, 32, "体育", style)
        ws.write_merge(3, 3, 33, 36, "音乐", style)
        ws.write_merge(3, 3, 37, 40, "绘画", style)
        for i in range(1, 41, 4):
            ws.write(4, i, "初一上期中考试")
            ws.write(4, i + 1, "初一上期末考试")
            ws.write(4, i + 2, "初一下期末考试")
            ws.write(4, i + 3, "初一下期末考试")
        ws.write(65, 0, '平均分')
        ws.write(66, 0, '最高分')
        ws.write(67, 0, '最低分')
    
        for i in range(len(students)):
            ws.write(5 + i, 0, students[i][0])
    
        for k in range(5, len(students) + 5):
            num=0
            for j in range(1,40,4):
                ws.write(k,j,studentgrade11[k-5][num])
                num+=1
    
        for k in range(5, len(students) + 5):
            num = 0
            for j in range(2, 40, 4):
                ws.write(k, j, studentgrade12[k - 5][num])
                num += 1
    
        for k in range(5, len(students) + 5):
            num = 0
            for j in range(3, 40, 4):
                ws.write(k, j, studentgrade13[k - 5][num])
                num += 1
    
        for k in range(5, len(students) + 5):
            num = 0
            for j in range(4, 41, 4):
                ws.write(k, j, studentgrade14[k - 5][num])
                num += 1
    
        # for i in range(len(studentgrade11)): #10
        #      sum=0
        #      for j in range(len(studentgrade11[i])): #60
        #          sum+=studentgrade11[i][j]
        #          sum=sum/60
        #          print(sum)
    
        file = '初一成绩表.xls'
    
        wb.save(file)
    
    
    def writeTermExam2(students,testgrade21,testgrade22,testgrade23,testgrade24):
        """
        将该班初二年级的上学期期中,期末,下学期期中期末考试整合在一张表里
        :param students:
        :param testgrade21:
        :param testgrade22:
        :param testgrade23:
        :param testgrade24:
        :return:
        """
        wb = xlwt.Workbook(encoding="utf-8")
        ws = wb.add_sheet("ScoreTable")
        style = xlwt.XFStyle()
        font = xlwt.Font()
        font.bold = True
        font.height = 300
        font.colour_index = 4
        alignment = xlwt.Alignment()
        alignment.horz = xlwt.Alignment.HORZ_CENTER
        alignment.vert = xlwt.Alignment.VERT_CENTER
        style.font = font
        style.alignment = alignment
        ws.write_merge(0, 2, 0, 12, "初二学生期中期末成绩表", style)
        ws.write_merge(3, 4, 0, 0, "姓名", style)
        ws.write_merge(3, 3, 1, 4, "语文", style)
        ws.write_merge(3, 3, 5, 8, "数学", style)
        ws.write_merge(3, 3, 9, 12, "英语", style)
        ws.write_merge(3, 3, 13, 16, "物理", style)
        ws.write_merge(3, 3, 17, 20, "地理", style)
        ws.write_merge(3, 3, 21, 24, "生物", style)
        ws.write_merge(3, 3, 25, 28, "历史", style)
        ws.write_merge(3, 3, 29, 32, "政治", style)
        ws.write_merge(3, 3, 33, 36, "体育", style)
        ws.write_merge(3, 3, 37, 40, "音乐", style)
        ws.write_merge(3, 3, 41, 44, "绘画", style)
        for i in range(1, 45, 4):
            ws.write(4, i, "初二上期中考试")
            ws.write(4, i + 1, "初二上期末考试")
            ws.write(4, i + 2, "初二下期中考试")
            ws.write(4, i + 3, "初二下期末考试")
        ws.write(65, 0, '平均分')
        ws.write(66, 0, '最高分')
        ws.write(67, 0, '最低分')
        for i in range(len(students)):
            ws.write(5 + i, 0, students[i][0])
    
        for k in range(5, len(students) + 5):
            num = 0
            for j in range(1, 44, 4):
                ws.write(k, j, studentgrade21[k - 5][num])
                num += 1
        for k in range(5, len(students) + 5):
            num = 0
            for j in range(2, 44, 4):
                ws.write(k, j, studentgrade22[k - 5][num])
                num += 1
        for k in range(5, len(students) + 5):
            num = 0
            for j in range(3, 44, 4):
                ws.write(k, j, studentgrade23[k - 5][num])
                num += 1
        for k in range(5, len(students) + 5):
            num = 0
            for j in range(4, 45, 4):
                ws.write(k, j, studentgrade24[k - 5][num])
                num += 1
        file = '初二成绩表.xls'
    
        wb.save(file)
    
    # def writeTermExam3(students,testgrade31,testgrade32,testgrade33,testgrade34):
    #     wb = xlwt.Workbook(encoding="utf-8")
    #     ws = wb.add_sheet("ScoreTable")
    #     style = xlwt.XFStyle()
    #     font = xlwt.Font()
    #     font.bold = True
    #     font.height = 300
    #     font.colour_index = 4
    #     alignment = xlwt.Alignment()
    #     alignment.horz = xlwt.Alignment.HORZ_CENTER
    #     alignment.vert = xlwt.Alignment.VERT_CENTER
    #     style.font = font
    #     style.alignment = alignment
    #     ws.write_merge(0, 2, 0, 12, "初三学生期中期末成绩表", style)
    #     ws.write_merge(3, 4, 0, 0, "姓名", style)
    #     ws.write_merge(3, 3, 1, 4, "语文", style)
    #     ws.write_merge(3, 3, 5, 8, "数学", style)
    #     ws.write_merge(3, 3, 9, 12, "英语", style)
    #     ws.write_merge(3, 3, 13, 16, "物理", style)
    #     ws.write_merge(3, 3, 17, 20, "化学", style)
    #     ws.write_merge(3, 3, 21, 24, "地理", style)
    #     ws.write_merge(3, 3, 25, 28, "生物", style)
    #     ws.write_merge(3, 3, 29, 32, "历史", style)
    #     ws.write_merge(3, 3, 33, 36, "政治", style)
    #     ws.write_merge(3, 3, 37, 40, "体育", style)
    #     ws.write_merge(3, 3, 41, 44, "音乐", style)
    #     ws.write_merge(3, 3, 45, 49, "绘画", style)
    #     for i in range(1, 49, 4):
    #         ws.write(4, i, "初二上期中考试")
    #         ws.write(4, i + 1, "初二上期末考试")
    #         ws.write(4, i + 2, "初二下期中考试")
    #         ws.write(4, i + 3, "初二下期末考试")
    #     ws.write(65, 0, '平均分')
    #     ws.write(66, 0, '最高分')
    #     ws.write(67, 0, '最低分')
    #     for i in range(len(students)):
    #         ws.write(5 + i, 0, students[i][0])
    #
    #     for k in range(5, len(students) + 5):
    #         num = 0
    #         for j in range(1, 49, 4):
    #             ws.write(k, j, studentgrade31[k - 5][num])
    #             num += 1
    #     for k in range(5, len(students) + 5):
    #         num = 0
    #         for j in range(2, 49, 4):
    #             ws.write(k, j, studentgrade32[k - 5][num])
    #             num += 1
    #     for k in range(5, len(students) + 5):
    #         num = 0
    #         for j in range(3, 49, 4):
    #             ws.write(k, j, studentgrade33[k - 5][num])
    #             num += 1
    #     for k in range(5, len(students) + 5):
    #         num = 0
    #         for j in range(4, 49, 4):
    #             ws.write(k, j, studentgrade34[k - 5][num])
    #             num += 1
    #
    #     file = '初三成绩表.xls'
    #
    #     wb.save(file)
    
    def write_excel1(teachers,work):
        """
        打印出老师评测表,具有工作号,老师姓名,老师工作量
        :param teachers:
        :param work:
        :return:
        """
        wb = xlwt.Workbook(encoding="utf-8")
        s = wb.add_sheet("江西财经大学附属中学老师评测表")
        style = xlwt.XFStyle()
        font = xlwt.Font()
        font.bold=True
        font.height=300
        font.colour_index=4
        alignment=xlwt.Alignment()
        alignment.horz=xlwt.Alignment.HORZ_CENTER
        alignment.vert=xlwt.Alignment.VERT_CENTER
        style.font=font
        style.alignment=alignment
        s.write_merge(0, 2, 0, 2 , "教师测评表", style)
        s.write(3,0,"教师编号")
        s.write(3,1,"教师姓名")
        s.write(3,2,"任课科目")
        s.write(3,3,"工作量")
        for i in range(len(teachers)):
            for j in range(len(teachers[i])):
                s.write(i+4,j,teachers[i][j])
            # s.write(4+1,3,work[i])
    
        wb.save("教师测评表.xls")
    
    # def reade_excel1(excel,work,name):
    #     file = excel
    #     grade=[120,120,120,70,70,50,50,70,100,70,30,30]
    #     wb = xlrd.open_workbook(filename=file)  # 打开文件
    #     # print(wb.sheet_names())  # 获取所有表格名字
    #     sheet1 = wb.sheet_by_name(name)  # 通过索引获取表格
    #     for i in range(2,14):
    #         cols = sheet1.col_values(i)  # 获取列内容
    #         for j in range(4,64):
    #             price=0
    #             print(cols[j])
    #             if i <=5:
    #                 if cols[j]>grade[i-2]*0.9:
    #                     price = 1
    #                 elif cols[j] > grade[i-2]*0.8:
    #                     price = 0.3
    #                 elif cols[j]<grade[i-2]*0.6:
    #                     price = -0.1
    #                 work[i-2] += price
    #             else:
    #                 if cols[j] > grade[i - 2] * 0.9:
    #                     price = 0.3
    #                 elif cols[j] > grade[i - 2] * 0.8:
    #                     price = 0.1
    #                 work[i - 2] += price
    #     return work
    def count_work(work,grade):
        """
        其中对于语文、数学、外语的老师:如果一个学生成绩90分以上,教师奖励1个工作量,一个学生成绩超过80分,奖励教师0.3个工作量,如果
        一个学生成绩低于60分,扣除0.1个工作量。其他科目的老师:如果一个学生成绩90分以上,教师奖励0.3个工作量,一个学生成绩超过80分,
        奖励教师0.1个工作量,如果一个学生成绩低于60分,扣除0.1个工作量。
        :param work:
        :param grade:
        :return:
        """
        scores = [120, 120, 120, 70, 70, 50, 50, 70, 100, 70, 30, 30]
        for j in range(len(grade)):
            price = 0
            for i in range(len(grade[j])):
                if i<=2:
                    if grade[j][i] >= scores[i]*0.9:
                        price=1
                    elif grade[j][i] >= scores[i]*0.8:
                        price=0.3
                    elif grade[j][i] <= scores[i]*0.6:
                        price= -0.1
                else:
                    if grade[j][i] >= scores[i]*0.9:
                        price=0.3
                    elif grade[j][i] >= scores[i]*0.8:
                        price=0.1
                work[i] += price
        return work
    
    def count_finally(work,grade):
        """
        中考成绩需要特别奖励,考起师大附中和南昌二中的,一个学生奖励1000个工作量,按各科成绩所占比率分配给任课老师,其他不给与惩罚。
        :param work:
        :param grade:
        :return:
        """
        scores = [120, 120, 120, 70, 70, 50, 50, 70, 100, 70, 30, 30]
        for i in range(len(grade)):
            num =0
            flag=0
            for j in range(len(grade[i])):
                num += grade[i][j]
                if num>774:
                    flag=1
            if(flag>0):
                for j in range(len(grade[i])):
                    price = 1000*grade[i][j]/num
                    work[j]+=price
        return work
    def sort(work): #挑选出work队列中最大的五个数并返回
        t = copy.deepcopy(work)
        # 求m个最大的数值及其索引
        max_number = []
        max_index = []
        for _ in range(5):
            number = max(t)
            index = t.index(number)
            t[index] = 0
            max_number.append(number)
            max_index.append(index)
        t = []
        return max_number
    def getint(work):   #将work工作量取整
        for i in range(len(work)):
            work[i]=int(work[i])
        return work
    
    def bar(work):#画出柱状图的函数
        labels = ['first', 'secend', 'third', 'fourth', 'fifth']
        x = np.arange(len(labels))  # the label locations
        width = 0.35  # the width of the bars
        fig, ax = plt.subplots()
        rects1 = ax.bar(x - width / 2, work2, width, label='Men')
        ax.set_ylabel('work num')
        ax.set_title('work ranking')
        ax.set_xticks(x)
        ax.set_xticklabels(labels)
        ax.legend()
        fig.tight_layout()
    
        plt.show()
    if __name__=="__main__":
        students=create_student(60)
        # for i in range(len(students)):
        #     print(students[i])
        # for i in range(len(teachers)):
        #     print(teachers[i])
        studentsgrade1 = test_student1(60)
        # for i in range(len(students_grade)):
        #     print(students_grade[i])
        studentsgrade2=test_student2(studentsgrade1)
        studentsgrade3 = test_student3(studentsgrade2)
    
        theme3 = ["姓名", "学号", "语文", "数学", "英语", "物理", "化学", "地理", "生物 ","历史", "政治", "体育", "音乐", "绘画"]
        theme2 = ["姓名", "学号", "语文", "数学", "英语", "物理", "地理", "生物 ","历史", "政治", "体育", "音乐", "绘画"]
        theme1 = ["姓名", "学号", "语文", "数学", "英语", "地理", "生物 ","历史", "政治", "体育", "音乐", "绘画"]
        write_excel3(students, studentsgrade3, "初三", theme3, 4, 13)
        write_excel3(students, studentsgrade2, "初二", theme2, 4, 13)
        write_excel3(students, studentsgrade1, "初一", theme1, 4 ,13)
    
    
        # testgrade=[]
        # for i in range(4):
        #     studentgrade= test_studentnext(students_grade)
        #     students_grade=studentgrade
        #     testgrade.append(studentgrade)
    
        # for i in range(len(testgrade)):
        #     for j in range(len(testgrade[i])):
        #         for k in range(len(testgrade[i][j])):
        #             print(testgrade[i][j][k])
    
        studentgrade11 = test_studentnext(studentsgrade1)
        # print(len(studentgrade11))
        # print(len(studentgrade11[0]))
    
        studentgrade12 = test_studentnext(studentgrade11)
        studentgrade13 = test_studentnext(studentgrade12)
        studentgrade14 = test_studentnext(studentgrade13)
        writeTermExam1(students,studentgrade11,studentgrade12,studentgrade13,studentgrade14)
    
        """
            test_student2是根据初一下学期期末考试的成绩基础上进行上下波动,并对新科目物理进行随机生成成绩
            test_studentnext(grade)是根据传进grade成绩基础上,#学校管理严格,有1%以下的学生向下波动,有5%的学生向上波动
        """
        studentgrade21 = test_student2(studentgrade14)
        studentgrade22 = test_studentnext(studentgrade21)
        studentgrade23 = test_studentnext(studentgrade22)
        studentgrade24 = test_studentnext(studentgrade23)
        writeTermExam2(students,studentgrade21,studentgrade22,studentgrade23,studentgrade24)
    
        # studentgrade31 = test_student3(studentgrade24)
        # studentgrade32 = test_studentnext(studentgrade31)
        # studentgrade33 = test_studentnext(studentgrade32)
        # studentgrade34 = test_studentnext(studentgrade33)
        # writeTermExam3(students, studentgrade31, studentgrade32, studentgrade33, studentgrade34)
    
        studentgrade31 = test_student3(studentgrade24)
        write_excel3(students,studentgrade31,"月考",theme3, 4,13)
    
        studentgrade32 =test_studentnext(studentgrade31)
        write_excel4(students,studentgrade32,"中考",theme3, 4,13)
        work=[0,0,0,0,0,0,0,0,0,0,0,0]
        # print(len(studentgrade31))
        # print(len(studentgrade31[0]))
        # work=reade_excel1("月考.xls",work,"月考")
        work=count_work(work,studentgrade31)
        work=count_finally(work,studentgrade32)     #特别是中考成绩需要特别奖励,考起师大附中和南昌二中的,一个学生奖励1000个工作量,按各科成绩所占比率分配给任课老师,其他不给与惩罚。
    
    
        getint(work)                #将工作量转化为整数
    
        """
            将工作量赋给创建老师列表中的工作量,并创建老师的excel文件
        """
        teachers = create_teacher(12)
        for i in range(len(teachers)):
            for j in range(len(teachers[i])):
                if j==3:
                    teachers[i][j]=work[i]
        # print(teachers)
        write_excel1(teachers, work)
    
    
        work2 = sort(work)  #挑出前五名的工作量
        bar(work2)      #将其打印成柱状图

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值