所以我的程序目前按名称和分数排序,但我需要为用户创建平均分数。
以下是我的文件的快速示例:
Reece 5
John 6
Reece 8
Reece 9
Alex 9
我需要能够像这样打印Reece的平均分数:
Reece 7.3
7.3是5,8,9的平均值
我不完全确定如何控制这个,有什么帮助?
答案 0 :(得分:0)
假设您有一个您正在阅读的文件file.txt
,您可以通过以下方式计算出一个人的平均分数:
def getMean(name):
with open('file.txt', 'r') as f:
total = 0
count = 0
for line in f.readlines():
line = line.split(" ")
if line[0] == name:
total += int(line[1])
count += 1
return total/count
这将读取文件中的每一行,将其拆分到空格中,每当第一个单词等于您要查找的名称时,它会将值添加到运行总计并递增计数。然后,最后,它可以计算出平均值。一个示例调用是:
>>> getMean("Reece")
7.333333333333
如果你想将它舍入到一个小数位,你有两个选项,第一个是舍入返回值:
>>> round(getMean("Reece"), 1)
7.3
或者在函数中对其进行舍入:
return round(total/count,1)
答案 1 :(得分:0)
将信息读入某种数据结构(例如,字典)。 这意味着您必须在阅读时解析数据,这意味着,在您阅读数据时,您需要能够理解哪个部分是密钥(在本例中是名称),哪个部分是价值(意味着得分)
计算每个人的平均分数,这将根据您选择存储数据的方式而有所不同。
使用计算出的信息排序。
答案 2 :(得分:0)
可以做到的一种方法是将值读入列表中(使用python3)。
mydic={}
with open('myfile.txt','r') as f:
for line in f:
name,value=line.split()
value=int(value)#or float
if name in mydic.keys():
mydic[name].append(value)
else:
mydic[name]=[value]
#compute average:
for name in mydic:
average=sum(mydic[name])/len(mydic[name])
print("{} : {}".format(name,average))
给出了输出:
John : 6.0
Alex : 9.0
Reece : 7.333333333333333
答案 3 :(得分:0)
你可以这样试试,
def get_average(data):
vals = {item.split()[0]: [] for item in data.splitlines()}
for item in data.splitlines():
vals[item.split()[0]].append(float(item.split()[1]))
return { k: sum(v) / len(v) for k, v in vals.iteritems()}
data = '''Reece 5
John 6
Reece 8
Reece 9
Alex 9 '''
average = get_average(data)
print(average['Reece'])
输出
7.33333333333