任务描述 本关任务:利用附件中的成绩数据进行成绩统计,根据总分进行升序排序后,输出总分最低分和最高分,按总分升序输出前n名同学和后n名同学成绩信息(n为非负数,当n大于数据行数时,按实际行数输出),输出每题的平均成绩。 测试说明 平台会对你编写的代码进行测试: 测试输入:2 预期输出: 最低分0分,最高分30分 [['12529', '朱佳年', '0121701100203', '0', '0', '0', '0', '0', '0', '0'], ['12347', '李世祥', '0121701100208', '0', '0', '0', '0', '0', '0', '0']] [['11916', '杨旺霖', '0121701100527', '5', '5', '5', '5', '5', '5', '30'], ['11955', '罗家威', '0121701100622', '5', '5', '5', '5', '5', '5', '30']] [3.11, 3.24, 2.97, 3.24, 2.57, 3.24] 提示: #根据最后一列进行排序 ls.sort(key = lambda x:int(x[-1])) 排序后,最低分在第一行的最后一个位置:ls[0][-1] 最高分在最后一行的的最后一个位置:ls[-1][-1] 后n名同学的信息是:ls[:n] 前n名同学的的信息是:ls[-n:] 处理每题的平均分时,按列处理数据。
时间: 2023-08-06 20:18:38 浏览: 143
以下是完整代码实现,并附有注释说明:
```python
# 读取输入数据,将数据存储在一个列表中
data = []
with open('score.csv', 'r') as f:
for line in f:
row = line.strip().split(',')
data.append(row)
# 根据学生的总分进行排序,输出总分最低分和最高分
data.sort(key=lambda x: sum(map(int, x[3:])))
lowest_score = data[0][-1]
highest_score = data[-1][-1]
print(f"最低分{lowest_score}分,最高分{highest_score}分")
# 按总分升序输出前n名同学和后n名同学的成绩信息
n = int(input("请输入需要输出的前n名和后n名同学的个数:"))
if n > len(data):
n = len(data)
top_n_students = data[-n:]
bottom_n_students = data[:n]
print(f"前{n}名同学的成绩信息:{top_n_students}")
print(f"后{n}名同学的成绩信息:{bottom_n_students}")
# 计算每题的平均成绩,按列处理数据
num_subjects = len(data[0]) - 3
avg_scores = []
for i in range(3, 3+num_subjects):
scores = [int(x[i]) for x in data]
avg_score = sum(scores) / len(scores)
avg_scores.append(avg_score)
print(avg_scores)
```
注意:在运行代码之前,需要将score.csv文件放在同一目录下。
阅读全文