使程序能将文件中的数据转为子列表元素是浮点数的二维列表,先去掉弃权评委的成绩(空字符串),再去掉每位选手的一个最高分和一个最低分,计算每位选手的平均分并附加到子列表末尾(平均分保留小数点后2位)。输入一个整数n,以列表形式输出前n位选手的成绩。python
时间: 2024-03-01 15:54:00 浏览: 83
以下是一个实现上述功能的程序:
```python
def read_scores(file_name):
with open(file_name, 'r') as f:
lines = f.readlines()
# 去除换行符
lines = [line.strip() for line in lines]
# 按逗号分隔,生成二维列表
data = [line.split(',') for line in lines]
# 去除弃权评委的成绩
data = [[float(score) if score != '' else 0 for score in line[1:]] for line in data]
# 去除最高分和最低分
data = [sorted(line)[1:-1] for line in data]
# 计算平均分
data = [[round(sum(line) / len(line), 2)] + line for line in data]
return data
def print_n_top_scores(scores, n):
# 按平均分排序
scores.sort(reverse=True)
# 输出前n位选手的成绩
for i in range(n):
print('No.{}: {}'.format(i+1, scores[i]))
file_name = 'scores.txt'
scores = read_scores(file_name)
n = 5
print_n_top_scores(scores, n)
```
该程序首先定义了一个`read_scores`函数,可以从文件中读取数据,并按要求进行处理,生成二维列表。然后,定义了一个`print_n_top_scores`函数,可以按平均分从高到低排序,并输出前n位选手的成绩。
最后,调用`read_scores`函数读取数据,调用`print_n_top_scores`函数输出前n位选手的成绩。你需要将程序中的`scores.txt`替换为实际的文件名,根据文件中的数据格式进行修改。
阅读全文