网站开发 技术优势/360推广和百度推广哪个好
去年年底接到了部门活动的一个小程序项目,趁着春节假期将整个流程和代码整理一下。
本程序(基于Python)可实现对大型活动评委打分及观众投票的excel进行统计计算,去除评委最高分和最低分,并进行规定的加权,最后计算出最终得分及排名,输出为txt格式
当前小组最终得分计算公式:
MARK=∑i=1tnjudgermi−mmax−mmintnjudger−2∗0.8+(100nviewer∗nvotes)∗0.2MARK = \frac{\sum_{i=1}^{tnjudger}m_i-mmax-mmin}{tnjudger-2}*0.8+(\frac{100}{nviewer}*nvotes)*0.2 MARK=tnjudger−2∑i=1tnjudgermi−mmax−mmin∗0.8+(nviewer100∗nvotes)∗0.2
MARK:总分
tnjudger:对于当前小组实际参投评委数
mmax: 评委最高分
mmin:评委最低分
mi:第 i 位评委打分
nviewer:观众总数
nvotes:投票数
详细使用流程请见演示视频:https://www.bilibili.com/video/BV1fi4y1K7Eh/
大型活动计分程序使用教程
使用提示:
1.需根据实际情况先修改inp.xlsx中的参演小组数、评委数、观众总数、评委权重、观众权重
2.将评委评分依次输入在对应组名下即可,将观众举旗数输入在最后一位评委下面的一行即可
3.使用本程序需要将inp.xlsx保存在与该exe同一目录下
4.完成以上工作后,按回车键即可开始进行结果的合成,结果将输出为在同一目录下的opt.txt
V1.2更新日志:
可实现对有任意评委未参评的情况进行特殊处理,录入数据时,如有评委未参与当前小组打分,保持该格数据为空即可,切勿将下方单元格上移。
核心代码:
"""
V1.2 更新:
支持对有任意评委未参评的情况进行特殊处理"""import xlrdloc="inp.xlsx"n_group=0
n_judger=0
n_viewers=0
judger_wei=1.0 # judger's mark's weight
vote_wei=1.0marks={} #use dic to save mark <-> name (name:mark)
marks_sorted=()def copyright():print("---------------------------------------------------------------------------------------------------")print("| 欢迎使用【党课大活动计分程序V1.2版】 Author:ShuoCHN ")print("| 本程序可实现对党课大活动评委打分及观众投票进行统计,去除评委最高分和最低分,并进行规定的加权 ")print("| 最后计算出最终得分及排名,输出为txt格式 ")print("| 使用提示: ")print("| 1.需根据实际情况先修改inp.xlsx中的参演小组数、评委数、观众总数、评委权重、观众权重 ")print("| 2.将评委评分依次输入在对应组名下即可,》》将观众举旗数输入在最后一位评委下面的一行即可《《 ")print("| 3.使用本程序需要将inp.xlsx保存在与该exe同一目录下 ")print("| 4.完成以上工作后,按》》回车键《《即可开始进行结果的合成,结果将输出为在同一目录下的opt.txt ")print("| ")print("| 在使用过程中遇到任何问题或建议请联系:计算机类205班赵硕(wxid:ShuoCHN) ")print("| Copyright © ShuoCHN ")print("-----------------------------------------------------------------------------------------------------\n")def read_xls(loc):wb = xlrd.open_workbook(loc)sheet1 = wb.sheet_by_index(0)# get the nubmers which is importantglobal n_group,n_judger,n_viewers,judger_wei,vote_wein_group = int(sheet1.cell(0, 9).value)n_judger = int(sheet1.cell(0, 11).value)n_viewers = int(sheet1.cell(0, 13).value)judger_wei = float(sheet1.cell(0, 15).value)vote_wei = float(sheet1.cell(0, 17).value)for j in range(0,n_group):name = sheet1.cell(1,j).valuejudger_mark=0.0votes_mark = sheet1.cell(n_judger+2,j).valuetotmark=0.0mmax= -1mmin=101tn_judger = n_judgerfor i in range(2,n_judger+2):if sheet1.cell(i,j).value != "":mmax=max(mmax,sheet1.cell(i,j).value)mmin=min(mmin,sheet1.cell(i,j).value)judger_mark+=sheet1.cell(i,j).valueelse:tn_judger-=1judger_mark=judger_mark-mmin-mmaxjudger_mark=float(judger_mark)/float(tn_judger-2)*judger_weivotes_mark= (float(votes_mark)*(100.0/float(n_viewers)))*vote_weitotmark = judger_mark+votes_markmarks[name]=totmark# sort the marksglobal marks_sortedmarks_sorted = sorted(marks.items(), key=lambda kv: (kv[1], kv[0]),reverse=True)def opt():txt_opt=""tm=marks_sortedfor i in range(0,n_group):txt_temp=tm[i][0]+"最终得分:"+str(format(tm[i][1], '.2f'))+",第"+str(i+1)+"名\n"txt_opt += txt_tempprint(txt_opt)fw=open("opt.txt","w+")fw.write(txt_opt)if __name__ == '__main__':copyright()input("按回车键即可开始进行结果的合成:")read_xls(loc)opt()input("合成已完成,请打开同目录下的opt.txt查看结果,按回车键退出")
编译好的exe文件及inp.xlsx详见GitHub:https://github.com/ShuoCHN/ScoringProgram
文章版权所有 © ShuoCHN
博客页:https://blog.csdn.net/ShuoCHN
作者:ShuoCHN
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ShuoCHN/article/details/113815007