2016-02-15 2 views
-1

Так что моя программа в настоящее время сортируется по имени и по счету, но мне нужно создать средний балл для пользователя.Сортировка по среднему баллу Python

Вот краткий пример моего файла:

Reece 5 
John 6 
Reece 8 
Reece 9 
Alex 9 

мне нужно быть в состоянии напечатать средний балл для Риса примерно так:

Reece 7.3 

7,3 будучи в среднем 5,8 , 9

Я не совсем уверен, как контролировать это, любую помощь?

+0

не знаю, как вы получаете ваш вклад, но [словарь ] (https://docs.python.org/2/tutorial/datastructures.html#d словари). – Lafexlos

ответ

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) 
+0

Когда я использую это в первый раз, и пользователь получает оценку 0, вы получаете ошибку с нулевым делением – rward37

+0

@ rward37 Aha! Конечно, это будет так.Вы можете поймать это с помощью простого оператора 'try: except:'. –

0
  1. Прочитайте информацию в какую-то структуру данных (например, словарь). Это означает, что вам придется анализировать данные во время чтения, а это значит, что пока вы читаете данные, вам нужно понять, какая часть является ключом (в данном случае это имя), а какая часть значение (что означает оценка)

  2. Вычислить средний балл для каждого человека, это будет варьироваться в зависимости от способа хранения ваших данных.

  3. Сортировка по вычисленной информации.

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 
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