某歌唱比赛有10位评委,选手得分规则为去掉一个最高分和最低分,取其余的平均分。选手们的成绩已经存放至sing.in文件(utf-8编码),请统计各位选手的得分,保留小数点后两位,并将成绩以降序排序输出至sing.out文件(utf-8编码)。 注意:测试用例中,选手数量可能与样例不同。
小文,5.4,5.5,9.7,7.6,8.0,7.1,5.0,8.2,5.4,6.4
小强,7.6,9.2,8.0,7.8,8.7,8.2,9.0,5.2,9.1,7.4
小刘,9.4,6.9,9.7,8.5,6.2,9.3,6.5,9.4,9.3,5.9
小成,9.8,6.0,5.5,5.0,6.9,9.0,10.0,5.7,5.7,9.0
小罗,6.1,9.3,8.0,9.6,7.4,10.0,5.6,6.7,7.4,5.1
小强:8.22
小刘:8.19
小罗:7.51
小成:7.20
小文:6.70
fr = open('sing.in', 'r', encoding='utf-8')
fw = open('sing.out', 'w', encoding='utf-8')
scores = {}
for line in fr:
items = line.strip().split(',')
name = items[0]
score = [float(x) for x in items[1:]]
score.sort()
score = score[1:-1]
average = round(sum(score) / len(score), 2)
average = '{:.2f}'.format(average)
scores[name] = average
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
for name, score in sorted_scores:
fw.write(f'{name}:{score}\n')
fr = open('sing.in', 'r', encoding='utf-8')
:打开名为'sing.in'的文件,以只读模式读取('r'
),使用UTF-8编码(encoding='utf-8'
),并将文件对象赋值给变量fr
。fw = open('sing.out', 'w', encoding='utf-8')
:打开名为'sing.out'的文件,以写入模式('w'
),使用UTF-8编码(encoding='utf-8'
),并将文件对象赋值给变量fw
。scores = {}
:创建一个空字典scores
,用于存储姓名和分数。for line in fr:
:遍历文件对象fr
中的每一行数据,并将每一行赋值给变量line
。items = line.strip().split(',')
:使用字符串的strip()
方法去除line
两端的空白字符,使用split()
方法按逗号","将每一行拆分成多个部分,并将拆分后的结果赋值给变量items
,形成一个列表。name = items[0]
:将列表items
的第一个元素赋值给变量name
,表示姓名。score = [float(x) for x in items[1:]]
:通过列表推导式将列表items
中从第二个元素到最后一个元素之间的每个元素转换为浮点数,并将转换后的结果组成一个新的列表,赋值给变量score
,表示分数。score.sort()
:对列表score
进行排序,从小到大。score = score[1:-1]
:将列表score
的第二个元素到倒数第二个元素之间的元素切片,并将切片后的结果重新赋值给变量score
,表示去掉最低分和最高分后的分数列表。average = round(sum(score) / len(score), 2)
:计算去掉最低分和最高分后的分数列表的平均值,并将结果保留两位小数,赋值给变量average
,表示平均分。average = '{:.2f}'.format(average)
:使用字符串的.format()
方法将变量average
格式化为保留两位小数的字符串形式,并将格式化后的结果重新赋值给变量average
。scores[name] = average
:将姓名作为键,平均分作为对应键的值,将数据存入字典scores
中。sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
:对字典scores
中的项进行排序,按照值(平均分)进行排序,从高到低排列,并将排序后的结果赋值给变量sorted_scores
。for name, score in sorted_scores:
:遍历变量sorted_scores
中的每一个元素,将每一个元素的键赋值给变量name
,值赋值给变量score
。fw.write(f'{name}:{score}\n')
:使用f-string
将姓名和平均分以冒号":"分隔的形式写入文件fw
,并在末尾添加换行符"\n"。