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 14:17:43 浏览: 114
以下是 Python 代码实现:
```python
# 计算列表中数学成绩的中位数
def median(lst):
n = len(lst)
s = sorted(lst, key=lambda x: int(x[2]))
if n % 2 == 0:
return (int(s[n//2-1][2]) + int(s[n//2][2])) / 2
else:
return int(s[n//2][2])
# 读入数据文件
data = []
with open('score.csv', 'r') as f:
for line in f:
data.append(line.strip().split(','))
# 计算数学成绩的中位数
math_scores = [x[2] for x in data[1:]]
math_median = median(data[1:])
# 根据输入的学号查找学生的数学成绩
student_id = input()
math_score = None
for record in data[1:]:
if record[0] == student_id:
math_score = int(record[2])
break
# 输出结果
if math_score is None:
print("数学的中位数是{:.2f}".format(math_median))
print("无此学号的学生!")
else:
diff = math_median - math_score
print("数学的中位数是{:.2f}".format(math_median))
print("学号{}的数学成绩比中位数低{:.2f}".format(student_id, diff))
```
代码运行说明:
1. 将代码保存为 `score.py` 文件;
2. 将数据文件 `score.csv` 放在代码文件同一目录下;
3. 运行代码;
4. 输入学号,例如 `2023101`;
5. 如果查询到该学号对应的记录,则输出学号和数学成绩与中位数之间的差值;否则输出中位数和提示信息“无此学号的学生!”。
阅读全文