7-3 CSV数据文件的的查询操作2 分数 10 全屏浏览题目 切换布局 作者 yqhyzy 单位 上海海洋大学 要求:在所给的数据文件‘score.csv’中,先计算数学成绩的中位数,然后再根据输入的学号查找学生的数学成绩。 注:限于平台的文件读取操作,本题假定已将数据文件读入列表中,列表内容如下: [['学号', '语文', '数学', '外语'], ['2023101', '96', '62', '87'], ['2023102', '90', '96', '60'], ['2023103', '73', '89', '91'], ['2023104', '77', '70', '62'], ['2023105', '93', '91', '80']] 三种可能的输出结果如下 输入样例: 在这里给出2组输入。例如: 2023101 2012101 输出样例: 在这里给出相应的输出。例如: 数学的中位数是89.00 学号2023101的数学成绩比中位数低27.00 数学的中位数是89.00 无此学号的学生!
时间: 2023-08-06 20:17:43 浏览: 38
以下是Python3代码实现:
```python
# 读取数据文件
data = []
with open('score.csv', 'r') as f:
for line in f:
data.append(line.strip().split(','))
# 计算数学成绩的中位数
math_scores = []
for i in range(1, len(data)):
math_scores.append(float(data[i][2]))
math_scores.sort()
if len(math_scores) % 2 == 0:
median_math_score = (math_scores[len(math_scores)//2 - 1] + math_scores[len(math_scores)//2]) / 2
else:
median_math_score = math_scores[len(math_scores)//2]
print('数学的中位数是{:.2f}'.format(median_math_score))
# 查找学号对应的数学成绩
stu_id = input()
found = False
for i in range(1, len(data)):
if data[i][0] == stu_id:
found = True
math_score = float(data[i][2])
break
if found:
print('学号{}的数学成绩比中位数低{:.2f}'.format(stu_id, median_math_score - math_score))
else:
print('无此学号的学生!')
```
解释如下:
首先,使用`open`函数读取CSV文件,并将其存储为一个二维列表`data`,其中第一行为表头,后面的每一行为一个学生的信息。
接着,遍历`data`列表,将每个学生的数学成绩存储在一个新的列表`math_scores`中,然后对其排序。接下来,通过判断`math_scores`的长度来确定中位数的计算方法,最后输出数学成绩的中位数。
最后,通过输入的学号在`data`列表中查找对应的学生信息,并输出其数学成绩与中位数的差值。如果找不到对应的学号,则输出提示信息。