在Python中计算平均值

0 投票
4 回答
1712 浏览
提问于 2025-04-16 14:02

我正在读取一个.txt文件,每个人有四个分数,我需要找出如何从每一行中提取分数,并计算每个人的平均分。

s={}
results= open("surf.txt")
for line in results:
  (s['Name'], s['scoreOne'], s['scoreTwo'], s['scoreThree'], s['scoreFour']) =line.split(";")

看起来这就是解决这个问题所需的全部代码。

surf.txt文件的内容是:

Johnny;8.65;7.32;7.81;9.12
Juan;9.12;8.45;8.80;5.60
Joseph;8.45;9.00;9.12;9.13
Stacey;7.81;8.33;9.00;8.10 
(...)

4 个回答

1

你可以用 [1:] 来切割结果列表。

for line in results:
    scores = line.split(';')[1:]
    scores = map(float, scores) # Conversion to float
    average = sum(scores)/len(scores)

这样做更通用,因为你不需要依赖分数的数量,只需去掉第一个元素就行了 :)

2

解决方案:

separator = ";"
inputFile = "input.txt"

with open(inputFile) as f:
    for line in f:
        values = line.split(separator)
        name = values[0]
        scores = map(float, values[1:])
        avg = sum(scores) / len(scores)
        print name, avg

输入:

Maciej;5;10;15;50
John;15;8;10;14
Mike;5;5;5;5

输出:

Maciej 20.0
John 11.75
Mike 5.0
1

如果你的文件格式是这样的:

john; 1; 2; 3; 4
pete; 5; 4; 3; 2
joan; 9; 8; 7; 6

那么你可以简单地这样做:

with open('surf.txt', 'rb') as fp:
 for line in fp.readlines():
  tokens = line.strip().split(';') # this creates a list of strings
  name = tokens[0] # extract the first (left-most) string (the name)
  nums = [float(k) for k in tokens[1:]] # convert strings to floats
  mean = sum(nums) / len(nums) # compute the arithmetic mean
  print "%s has a mean of %f" % (name, mean) # print the result

注意,这个例子在一个人有多个名字的情况下是行不通的:它假设名字只有一个列,而其他的列可以转换成浮点数。

撰写回答