自动判分系统

#目标是按照队员最高分数计入为 队伍分数
#首先是我们的数据集 来自腾讯微云
#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

自动判分系统_第1张图片
自动判分系统_第2张图片
合并队伍,并选出该队队员最高分作为最终队伍成绩。

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



关联两个表格

自动判分系统_第3张图片
关联两个表格

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

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

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

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)

你可能感兴趣的:(自动判分系统)