校园歌手大赛,共10位裁判,每位裁判给参赛选手打分,分数在0~10,去掉一个最高分,去掉一个最低分之后的平均分为该选手得分。设计程序,按照排名从前到后输出选手姓名及最终得分(保留两位小数)。 所有选手得分数据保存在文本文件sy6-6. txt中,其内容如下: 张丹丹8.7 8.9 9.43 9.23 8.89 9.12 8.79 9.04 9.36 9.66 李宏坤9.79.49 9.3 9.48.89 9.72 9.71 8.94 9.76 9.58 徐丽8.97 8.99.73 9.53 9.39 9.12 8.79 9.04 9.36 9.34 赵家山8.7 8.89 9.43 8.93 8.85 9.168.799.64 9.36 9.26 张新蕊9.37 9.299.23 9.35 9.76 9.72 9.71 9.94 9.469.93 李佳隆8.678.9 9.439.27 8.89 9.12 8.79 9.04 8.36 9.26 【程序运行结果】 张新蕊9.57 李宏坤 9.48 徐丽9.21 张丹丹9.09 赵家山 9.08 李佳隆8.99
时间: 2024-02-12 18:05:31 浏览: 176
好的,以下是实现该功能的Python代码:
```python
# 读取文件
with open('sy6-6.txt', 'r') as f:
data = f.readlines()
# 处理数据
scores = []
for line in data:
line = line.strip().split() # 去除空格和换行符,并按空格分隔
name = line[0] # 第一个元素为选手姓名
score = line[1:] # 其他元素为选手得分列表
score = [float(s) for s in score] # 将字符串列表转换为浮点数列表
score.remove(max(score)) # 去掉最高分
score.remove(min(score)) # 去掉最低分
avg_score = sum(score) / len(score) # 计算平均分
scores.append((name, avg_score)) # 将选手姓名和平均分添加到列表中
# 排序并输出结果
scores.sort(key=lambda x: x[1], reverse=True) # 按照平均分排序,从大到小排序
for i, s in enumerate(scores):
print(f'{i+1}. {s[0]} {s[1]:.2f}') # 输出排名和选手姓名、平均分
```
首先,我们使用 `with open()` 语句以只读模式打开文件 `sy6-6.txt`,并使用 `readlines()` 函数读取文件中的所有行。
接着,我们使用一个循环,遍历每一行数据,首先用 `strip()` 函数去除空格和换行符,然后使用 `split()` 函数将每个元素按空格分隔开。选手姓名为第一个元素,选手得分列表为其他元素。我们将得分列表转换为浮点数列表,并使用 `remove()` 函数去掉列表中的最高分和最低分,然后计算平均分,并将选手姓名和平均分添加到 `scores` 列表中。
处理完所有数据后,我们使用 `sort()` 函数对 `scores` 列表进行排序。由于需要按照平均分从大到小排序,所以我们使用 `key` 参数指定按照元素的第二个值排序,并将 `reverse` 参数设置为 `True`。
最后,我们使用一个循环遍历排序后的 `scores` 列表,输出排名和选手姓名、平均分。在输出平均分时,使用格式化字符串 `f'{s[1]:.2f}'` 将浮点数保留两位小数。
阅读全文