这是我的数据文件(名为“studentdata.txt”)
joe 10 15 20 30 40
bill 23 16 19 22
sue 8 22 17 14 32 17 24 21 2 9 11 17
grace 12 28 21 45 26 10
john 14 32 25 16 89
我需要计算每个学生的平均成绩,并打印出学生的姓名和平均成绩。我可以毫无问题地提取名称并确定考试分数,但我无法弄清楚如何总结考试分数。这就是我到目前为止所做的:
file=open("studentdata.txt","r")
for aline in file:
data=aline.split()
print((data[0]),"Average grade:")
print(len(data[1:]))
file.close()
答案 0 :(得分:3)
看起来你已经完成了大部分工作,而且你已经很好地掌握了如何将每一行划分为你需要的两个组件,所以你真的很接近!
首先,由于数据是以字符串形式读入的,因此您需要将部分数据转换为整数:
for line in file:
tmp = line.split()
name, scores = tmp[0], list(map(int, tmp[1:]))
这将为我们提供每个名称,以及作为整数的分数列表。现在你所要做的就是找到平均值:
average = sum(scores)/len(scores)
让我们通过分配字典将它们联系在一起:
dct[name] = average
我们得到:
{'joe': 23.0, 'bill': 20.0, 'sue': 16.166666666666668, 'grace': 23.666666666666668, 'john': 35.2}
答案 1 :(得分:1)
试试这个?
file = open("studentdata.txt", "r")
for aline in file:
data = aline.split()
# Convert list of string numerals to int
grades = [int(grade) for grade in data[1:]]
# Find average by dividing sum by length of numbers list
average = sum(grades)/len(data[1:])
print((data[0]), "Average grade:", str(average))
file.close()
答案 2 :(得分:0)
尝试以下代码,只需在空格上分割每一行,然后获取不带名称的数字,以便索引将为i.strip().split()[1:]
,然后使用map将其转换为整数,然后使用statistics.mean
得到平均值:
from statistics import mean
d = {}
with open('studentdata.txt','r') as f:
for i in f.readlines():
d[i.split()[0]] = mean(list(map(int,i.strip().split()[1:])))
print(d)
输出:
{'joe': 23.0, 'bill': 20.0, 'sue': 16.166666666666668, 'grace': 23.666666666666668, 'john': 35.2}