评分表求平均分并降序排序

根据8位评委对6名决赛选手的评分,程序首先去除每个选手的一个最高分和一个最低分,然后计算平均分,并按照平均分从高到低进行排序。最后输出选手编号及对应的平均得分。

【问题描述】一年一度的校园好声音进行到了激烈的决赛环节,8位评委对入围的6名选手给出了最终的评分,请根据评分表,将每位选手的得分去掉一个最高分和一个最低分后求平均分,并按照平均分由高到低的顺序输出选手编号和最后得分。

dic_score = {'012': [90, 94, 85, 54, 68, 75, 71, 21],
             '005': [8, 75, 21, 65, 89, 97, 25, 75],
             '108': [87, 54, 78, 25, 14, 98, 67, 57],
             '037': [45, 87, 54, 82, 95, 91, 57, 32],
             '066': [95, 67, 51, 48, 98, 92, 80, 39],
             '020': [85, 81, 65, 97, 35, 62, 71, 84]}
dic_avg = {}  # 存放平均分
for k, v in dic_score.items():
    v_min = min(v)# 求最低分
    v_max = max(v)  # 求最高分
    v_sum = sum(v)  # 求总分
    v_sum = v_sum - v_max - v_min  # 从总分中去除最大值和最小值
    v_avg = v_sum / (len(v) - 2)  # 求平均分
    dic_avg[k]=v_avg#取k,将平均值作为键赋给字典
# 将参赛者编号和平均值存入字典dic_avg中
# 按照平均分由大到小排序
lt_avg = [(v, k) for k, v in dic_avg.items()]
lt_avg.sort(reverse=True)  # 由大到小排序
lt_avg = [(v, k) for k, v in lt_avg]
dic_avg =dict(lt_avg)
# 将列表lt_avg转换为字典dic_avg
# 输出结果
for k,v in dic_avg.items():#k,v很重点重点
    print(k, v)

任务描述 本关任务:编写一个能分析二维列表中数据的小程序。 相关知识 为了完成本关任务,你需要掌握: 1.二维列表排序 2.多关键字排序 二维列表排序 ls.sort(*, key=None, reverse=False) sorted(ls, key=None, reverse=False) 排序方法参考第4关讲解。 二维列表排序一般用参数key=lamdba x: x[n]指定根据子列表 x 中序号为n 的数据项进行排序。 # 根据二维列表最后一个元素(序号-1)降序排序输出 score_ls = [[8.5, 7.5, 7.3, 7.9, 7.9, 8.5, 8.0, 7.6, 7.9], [9.1, 9.4, 8.9, 9.1, 9.12], [7.5, 8.0, 7.7, 7.9, 7.78], [7.2, 7.1, 6.8, 7.1, 6.2, 6.4, 6.9, 6.81], [8.1, 8.1, 7.9, 7.9, 7.5, 7.2, 7.8, 8.0, 7.81]] print(sorted(score_ls, key=lambda x: x[-1],reverse=True)) # [[9.1, 9.4, 8.9, 9.1, 9.12], # [8.5, 7.5, 7.3, 7.9, 7.9, 8.5, 8.0, 7.6, 7.9], # [8.1, 8.1, 7.9, 7.9, 7.5, 7.2, 7.8, 8.0, 7.81], # [7.5, 8.0, 7.7, 7.9, 7.78], # [7.2, 7.1, 6.8, 7.1, 6.2, 6.4, 6.9, 6.81]] 多关键字排序 二维列表多关键字排序一般用参数key=lamdba x: (x[n],x[m],...)指定,依次优先根据元组(x[n],x[m],...)中的项进行排序,主关键字x[n]值相同时,再根据次关键字 x[m]值排序,依此类推。 当要两个排序关键字一个升序一个降序时,可以将其中一个关键字设为负值。 score_ls = [[6.4, 6.1, 6.5, 7.1, 6.4, 6.3, 5.6, 6.6, 7.0], [8.1, 8.2, 7.7, 7.5, 7.5, 7.6, 8.2, 8.1, 7.6]] for i in range(len(score_ls)): # 遍历二维列表的长度,i为子列表的序号 avg = sum(score_ls[i])/len(score_ls[i]) # 计算当前序号子列表元素的平均值 score_ls[i].append(round(avg, 2)) # 修改当前序号的子列表,附加一个元素到列表末尾 print(score_ls) # [[6.4, 6.1, 6.5, 7.1, 6.4, 6.3, 5.6, 6.6, 7.0, 6.44], [8.1, 8.2, 7.7, 7.5, 7.5, 7.6, 8.2, 8.1, 7.6, 7.83]] 2.创建一个新的二维列表容纳附加了平均成绩的数据 score_ls = [[6.4, 6.1, 6.5, 7.1, 6.4, 6.3, 5.6, 6.6, 7.0], [8.1, 8.2, 7.7, 7.5, 7.5, 7.6, 8.2, 8.1, 7.6]] score_new = [] for lst in score_ls: # 遍历二维列表的长度,i为子列表的序号 avg = sum(lst)/len(lst) # 计算当前序号子列表元素的平均值 lst.append(round(avg, 2)) # 修改当前序号的子列表,附加一个元素到列表末尾 score_new.append(lst) print(score_new) # [[6.4, 6.1, 6.5, 7.1, 6.4, 6.3, 5.6, 6.6, 7.0, 6.44], [8.1, 8.2, 7.7, 7.5, 7.5, 7.6, 8.2, 8.1, 7.6, 7.83]] 10评委为参加程序设计创意赛的选手打分,评分规则是允许弃权,弃权的成绩户数空字符串,其他评分在0-10分之间,包含0和10。评委中最后一人为仲裁,此人不允许弃权(成绩非空)。 文件'mark_score.csv'中保存多选手的成绩,每行为一选手的成绩,各成绩之间用半角逗号分隔,编程读取各选手成绩。 编程要 根据提示,在右侧编辑器补充代码,使程序能将文件中的数据转为子列表元素是浮点数的二维列表,去掉每选手的一个最高分和一个最低分,计算每选手平均分附加到子列表末尾(平均分保留小数点后2)。 将二维列表根据平均成绩降序排序,当平均成绩相同时,根据仲裁成绩升序排序 输入一个整数n,以列表形式输出排序后前n选手的成绩。 测试说明 平台会对你编写的代码进行测试: 测试输入: 10 预期输出(下面为示例数据,非正确输出): [[8.8, 9.7, 8.9, 8.8, 9.5, 9.7, 8.9, 9.5, 9.35], [8.6, 9.7, 9.2, 9.6, 9.2, 9.7, 9.5, 8.8, 9.29], [9.0, 9.4, 9.6, 9.6, 9.0, 9.6, 9.1, 8.9, 9.28], [9.0, 9.0, 9.2, 8.8, 9.6, 9.3, 9.1, 9.9, 9.24], [9.8, 9.8, 8.6, 9.6, 9.1, 8.6, 9.6, 8.7, 9.23], [9.6, 9.4, 8.8, 9.4, 8.5, 9.3, 9.8, 8.7, 9.16], [9.1, 9.4, 8.9, 9.1, 9.12], [9.3, 9.4, 9.6, 9.6, 8.4, 9.4, 8.8, 8.2, 9.09], [8.8, 9.2, 9.4, 8.6, 9.5, 9.3, 9.5, 8.7, 9.06], [9.1, 9.5, 8.6, 9.3, 8.7, 9.5, 9.1, 8.9, 9.06]] 开始你的任务吧,祝你成功!
最新发布
11-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值