a.计算每一道题目的分数(每一列成绩)的平均值、标准差。注意剔除无效成绩(即 -1 分),但 0 分是有效成绩。 b.计算自己每一道题目的标准分:(自己的分数 - 本题目的平均值) / 本题目的标准差 c.计算自己的综合加权标准分:每题的标准分*该题的权重 之和 除以 总权重(40)
时间: 2024-02-13 22:05:09 浏览: 63
假设你的csv文件包含5道题的成绩,其中第1列是学生姓名,第2-6列是5道题的成绩,第7列是每道题的权重,你可以使用以下代码来计算每一道题目的平均值、标准差,以及计算自己每一道题目的标准分和综合加权标准分:
```python
import csv
import math
# 打开csv文件
with open('example.csv', newline='') as csvfile:
# 读取csv文件内容
reader = csv.reader(csvfile)
# 读取表头
header = next(reader)
# 初始化每道题的成绩列表和权重列表
scores = [[] for i in range(5)]
weights = []
# 循环遍历每一行
for row in reader:
# 遍历每一列
for i in range(1, 6):
# 判断成绩是否有效
if row[i] != '-1':
# 将有效成绩添加到成绩列表中
scores[i-1].append(float(row[i]))
# 将本题目的权重添加到权重列表中
weights.append(float(row[6]))
# 计算每道题的平均值和标准差
means = []
stds = []
for score in scores:
# 剔除无效成绩(-1分)
valid_scores = [s for s in score if s != -1]
# 计算平均值和标准差
mean = sum(valid_scores) / len(valid_scores)
std = math.sqrt(sum([(s - mean)**2 for s in valid_scores]) / len(valid_scores))
means.append(mean)
stds.append(std)
# 计算自己每一道题目的标准分和综合加权标准分
name = 'your name' # 自己的姓名
scores = []
for row in reader:
if row[0] == name:
scores = [float(s) for s in row[1:6]]
break
z_scores = [(s - means[i]) / stds[i] for i, s in enumerate(scores)]
weighted_z_scores = [z * w for z, w in zip(z_scores, weights)]
weighted_z_scores_sum = sum(weighted_z_scores)
total_weight = sum(weights)
final_score = weighted_z_scores_sum / total_weight
# 打印结果
print("每道题目的平均值:", means)
print("每道题目的标准差:", stds)
print("自己每一道题目的标准分:", z_scores)
print("自己的综合加权标准分:", final_score)
```
在上面的代码中,我们首先读取csv文件,并提取出每道题的成绩和权重,然后使用`sum`和`len`函数计算每道题的平均值和标准差。接着,我们读取自己的成绩,并计算出自己每一道题目的标准分和综合加权标准分。最后,我们打印出每道题目的平均值、标准差,自己每一道题目的标准分,以及自己的综合加权标准分。
阅读全文