Нахождение среднего в питоне - PullRequest
0 голосов
/ 20 марта 2011

Я читаю из файла .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 ]

2 голосов
/ 20 марта 2011

Решение:

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 голос
/ 20 марта 2011

Вы можете нарезать список результатов с помощью [1:]

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

это также более общий подход, потому что вы не будете зависеть от количества баллов, просто отбросьте первый элемент:)

1 голос
/ 20 марта 2011

Если ваш файл имеет следующий формат:

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

Обратите внимание, что этот пример НЕ будет работать, если у человека было более одного имени:предполагается, что для имени существует только ОДИН столбец, а остальные столбцы можно преобразовать в числа с плавающей точкой.

0 голосов
/ 20 марта 2011

файл cici.csv

Johnny;8.65;   7.32;7.81;9.12 
    Juan;9.12;8.45;8.80;5.60 ;  12.455   ; 2
Joseph Maria y Borbon;8.45;9.00;9.12;9.13 
Stacey      ;7.81    ;8.10

код

import csv

rid = csv.reader(open('cici.csv','rb'),delimiter=(';'))
av = dict( (row[0].strip(),sum(map(float,row[1:]))/(len(row)-1)) for row in rid)
print av

результат

{'Joseph Maria y Borbon': 8.925, 'Juan': 7.7375, 'Stacey': 7.955, 'Johnny': 8.225}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...