文件(.txt)存入n个(n>=10,自己定)学生的学号和三门课成绩【文本中每行是一个学生的信息,如写成:学号,成绩1,成绩2,成绩3】,编程提取数据,程序可输出每一门课的课程平均分,可以用学号查询某同学三门课的成绩并同时输出其总分,可以在输入学号时查询某同学各科成绩的排名以及总分排名【成绩相同则名次相同】
时间: 2023-03-22 21:02:10 浏览: 236
好的,我明白了。以下是我对你的问题的回答:
首先,我们可以通过读取文件中的数据并存储到一个字典或者列表中来提取数据。下面是读取文件中数据的一个示例代码:
```python
def read_data(file_path):
with open(file_path, 'r') as f:
lines = f.readlines()
data = {}
for line in lines:
values = line.strip().split(',')
key = values[0]
scores = list(map(float, values[1:]))
data[key] = scores
return data
```
该函数将文件路径作为参数传入,读取文件中每行的数据,并将学号和三门课成绩存储为一个字典的键值对。接下来,我们可以通过计算每门课程的平均分来实现第一个功能。示例代码如下:
```python
def calc_avg_scores(data):
num_students = len(data)
num_courses = len(data[list(data.keys())[0]])
avg_scores = [0] * num_courses
for scores in data.values():
for i, score in enumerate(scores):
avg_scores[i] += score / num_students
return avg_scores
```
该函数将读取的数据作为参数传入,计算每门课程的平均分并返回一个包含三门课程平均分的列表。接下来,我们可以通过学号查询某同学三门课的成绩并同时输出其总分。示例代码如下:
```python
def query_scores(data, id):
if id in data:
scores = data[id]
total_score = sum(scores)
return scores, total_score
else:
return None, None
```
该函数将读取的数据和学号作为参数传入,如果学号存在则返回该学生的三门课成绩和总分,否则返回None。最后,我们可以在输入学号时查询某同学各科成绩的排名以及总分排名。示例代码如下:
```python
def calc_rank(data, id):
if id in data:
scores = data[id]
total_score = sum(scores)
rank_scores = sorted(data.values(), key=lambda x: sum(x), reverse=True)
rank_total_scores = sorted(data.items(), key=lambda x: x[1], reverse=True)
score_rank = rank_scores.index(scores) + 1
total_score_rank = rank_total_scores.index((id, scores)) + 1
return score_rank, total_score_rank
else:
return None, None
```
该函数将读取的数据和学号作为参数传入,如果学号存在则返回该学生三门课程成绩的排名和总分排名,否则返回None。
以上就是我的回答,希望对你有帮助。
阅读全文