完成以下程序的设计:某体操比赛共有10名运动员参加,12名评委将根据运动员表现进行评分(满分10分),请编写Python程序,解决下列问题:
1).每个运动员评分中去掉一个最高分和一个最低分,计算平均成绩,然后给出运动员排名;
2).尽量减少人为因素,组委会要求去掉第一个问题中打最高分或最低分次数排名前二的评委给每个运动员的评分,然后计算平均成绩后排名。
这里给出实验结果,源码之后共享!!!
给出源码
def dispose_file(f):#处理数据文件函数
# 将文件存储在lis列表中
lis = []
for line in f:
# 使用map函数将每一行分数中的每个分数转化为float类型,然后在转化成list类型赋值给 l
l = list(map(float, line.split()))
lis.append(l)
return(lis)
def mark(lis,n): #打分函数 lis参数是一个二维分数列表
#求平均分
arra = []
j = 1
if n==1:
#这个求的是没有去掉评委的每个运动员的平均分
for i in lis:
x = (sum(i) - max(i) - min(i)) / 10
# j:对应运动员的下标 x:平均分 将这个元组添加到(j,x)arra列表中
arra.append((j, x))
j += 1
else:
#这个求的是去掉了评委之后每个运动员的平均分
for i in lis:
x = sum(i)/10
arra.append((j, x))
j += 1
#这里使用了sort函数对arra列表的第二个元素进行排序
#key=lambda x:x[1] 利用了lambda表达式定义了一个匿名函数,x为参数,x[1]为返回值,返回arra中的第二个元素
#reverse = True表示降序 reverse = False 表示升序
arra.sort(key=lambda x:x[1],reverse = True)
for i in range(len(arra)):
print("第{0:3}名 {1:4}号运动员 平均分数为:{2:5.2f}".format(i+1,arra