自动判分系统

作者: Neural_PDE | 来源:发表于2019-04-10 21:18 被阅读44次

    #目标是按照队员最高分数计入为 队伍分数
    #首先是我们的数据集 来自腾讯微云
    #https://share.weiyun.com/5ov0DKt
    #下载好之后直接把两个文件放入D盘即可,然后直接复制下面的内容就OK啦

    ####查看某列中的答案长什么样子(以便一会制作标准答案 来判分)####
    import pandas as pd
    import numpy as np
    data=pd.read_excel('D:/编程大赛B题.xls',header=0)
    aa=data["编程2"][0]
    aa

    ####统计A卷的得分###############
    import pandas as pd
    import numpy as np
    data=pd.read_excel('D:/编程大赛A题.xls',header=0)

    #或者可以选择路径(如下)
    #data=pd.read_csv('D:/D/1.csv',header=0)
    #data=pd.read_csv('C:/Users/fafa/1.csv',header=0)

    #定义 得分 函数:
    def score(a):
        s=0
        if a[3]=="C":  #第一列的正确答案
            s+=10        #第一列的分值
        if a[4]=="D":  #第二列的正确答案
            s+=10      #第二列的分值
        if a[5]=="C": #第三列的正确答案
            s+=10        #第三列的分值
        if a[6]=="B": #第四列的正确答案
            s+=10      #第四列的分值
        if a[7]=="A": #第五列的正确答案
            s+=10    #第五列的分值
        if len(str(a[8]).split(","))==5:  #填空题按照逗号分割后选择有5个元素的继续判断
            if str(a[8]).split(",")[0] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案
                s+=10    #第五列的分值
            if str(a[8]).split(",")[1] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案         
                s+=10    #第五列的分值
            if str(a[8]).split(",")[2] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案         
                s+=10    #第五列的分值
            if str(a[8]).split(",")[3] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案         
                s+=10    #第五列的分值
            if str(a[8]).split(",")[4] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案         
                s+=10    #第五列的分值
        return s

    #增加一列"得分"
    data["得分"]=[score(data.iloc[i]) for i in range(len(data.index))]

    #按照max得分统计队伍
    data2=data.groupby(["队伍名称"],as_index=False)["得分"].max()
    #按照sum得分统计队伍
    #data2=data.groupby(["队伍"],as_index=False)["得分"].sum()

    #按照 个数 统计 队伍
    #data.groupby(["队伍"]).size()

    #改名字
    data3=data2.rename(columns={"队伍":"队伍名称","得分":"赛题A最终分数"})

    #拍序(按照最终分数)
    dataA=data3.sort_values(by="赛题A最终分数",ascending=False)
    dataA
    ##########################################至此就结束了#########################################

    ####统计B卷的得分###############
    import pandas as pd
    import numpy as np
    data=pd.read_excel('D:/编程大赛B题.xls',header=0)
    #定义 得分 函数:
    def score(a):
        s=0
        if a[3]=="x=input()\nx=int(x)\nif x>=60:\n    y=\"及格\"\nelse:\n    y=\"不及格\"\nprint(y)": #第一列的正确答案
            s+=50 #第一列的分值
        if a[4]=="x=input()\nx=int(x)\nif x>0:\n    y=\"正\"\nelse:\n    y=\"负\"\nprint(y)": #第二列的正确答案
            s+=50 #第二列的分值
        return s
    #增加一列"得分"
    data["得分"]=[score(data.iloc[i]) for i in range(len(data.index))]#按照max得分统计队伍
    data2=data.groupby(["队伍名称"],as_index=False)["得分"].max()#按照sum得分统计队伍
    #改名字
    data3=data2.rename(columns={"队伍":"队伍名称","得分":"赛题B最终分数"})
    #拍序(按照最终分数)
    dataB=data3.sort_values(by="赛题B最终分数",ascending=False)
    dataB
    ##############################################至此就结束############################################

    #############后面的内容是如何关联多张成绩单,然后求和排名#########
    #按照“”队伍名称”关联多个表格
    dataD=pd.merge(dataA,dataB,on="队伍名称",how="outer")

    #增加一列总分
    dataD["总分"]=dataD.sum(axis=1)
    #排序(按照最终分数)
    dataD=dataD.sort_values(by="总分",ascending=False)
    dataD

    合并队伍,并选出该队队员最高分作为最终队伍成绩。

    合并队伍,并选出该队队员最高分作为最终队伍成绩。


    关联两个表格

    关联两个表格

    ##################################################################################

    ###################以下内容就是其他的一些小技巧啦,和这个没有关系啦################

    ##############按列求和##########

    data4.eval("总分 = 分数A+2*分数B",inplace=True)

    #inplace参数表示是否在原数据上操作inplace=False将会生成新的DataFrame

    #方法2

    data4['总分'] = data4.apply(lambda x:x['分数A']+2*x['分数B'],axis=1)

    data4

    ###################条件查询########

    data4.query("分数A>1")

    data4


    If you are interested in this topic.
    You can get in touch with me.
    18234056952(Tel  wechat  qq)

    相关文章

      网友评论

        本文标题:自动判分系统

        本文链接:https://www.haomeiwen.com/subject/mywoiqtx.html