直接上代码,解释在注释,不懂评论留言,必回
# 作者:key
# 开发时间:2020-10-18 15:45:10
# 开发环境:Pycharm
'''
3. 从文件中取出12个裁判员为10个运动员大的分数,
每个运动员评分中去掉一个最高分和一个最低分,计算平均成绩,然后给出运动员排名;
'''
'''
ls.sort(key = lambda x:x[1], reverse=True)用法
按照列表维度(指数组中第0,1,2个元素)进行排序,
默认为从小到大,'reverse=True'则意味着从大到小。
关于维度,形象地理解如下:
ls = [('k','ting',5), ('e', 'bao', 2), ('y', 'bei', 0)]中
x:x[0]相当于按'k', 'e', 'y'进行排序,其中x可以换成其他变量。
x:x[1]相当于按照 'ting', 'bao', 'bei'进行排序。
'''
fpath = "C:/Users/Lenovo/Desktop/dafen.txt"
with open(fpath,'r') as f:
player = [[]for i in range(10)]
countlines=0 #行数#这里的行数也代表了运动员的编号
for contents in f:
contents = contents.strip() #返回的是一个str类
contents = contents.split(' ') #返回一个list 按照空格分割
scorenum = len(contents) #这里的list大小,也就代表了一共有多少个分数
for i in range(scorenum):
contents[i]=float(contents[i])
maxscore = max(contents)
minscore = min(contents)
#round(tmp,int)将tmp保留为int位的小数位
temp = round((sum(contents)-maxscore-minscore)/(scorenum-2) ,2)
player[countlines].append("第{}号的选手成绩是".format(countlines+1))
player[countlines].append(temp)
countlines+=1
#排序
player.sort(key = lambda x:x[1],reverse = True)
#print(player) 输出
for i in range(10):
print("第{}名的选手是 ".format(i+1),player[i])
测试数据
本地保存为txt文件
8.9 9.3 7.9 9.0 8.8 6.5 8.4 6.6 8.2 9.1 9.2 8.8
9.0 7.8 8.7 8.9 9.0 7.6 8.1 6.5 9.6 7.7 6.9 7.5
5.8 7.4 5.3 7.3 9.1 7.9 6.7 6.8 7.8 8.0 7.6 8.1
9.0 7.9 8.3 9.2 7.8 9.2 6.4 6.9 5.8 7.7 8.2 9.0
9.0 8.6 6.9 7.5 5.8 8.6 7.4 6.8 8.4 7.8 9.2 6.7
7.5 9.7 8.9 9.6 7.8 6.5 7.1 8.0 6.6 8.0 8.5 8.9
8.7 7.9 8.8 9.2 7.6 9.1 6.8 9.0 7.8 9.4 8.3 9.2
8.9 7.8 8.7 8.6 8.5 7.4 6.5 9.4 7.7 8.9 6.9 8.4
7.8 8.5 7.6 6.6 8.7 7.8 9.5 7.8 9.9 7.3 8.9 7.7
8.9 7.9 8.8 9.0 7.9 9.2 8.7 8.7 8.9 7.9 8.7 7.7