python 3.x - Finding the average of a list -


so, guys i've got code reads file:

lenard  1 lenard  1 lenard  10 max 3 max 3 max 3 zack    5 zack    5 zack    5 james   10 james   10 james   10 

from file list created in form [10,10,10]. after done calculate average of list , outputs on screen.

my code partially works , instead:

10 18 28 

and average finds not 1 list last_3_scores.

my question why first number in list keep on getting added , average of calculated instead of average of last_3_scores.

heres code:

with open('studentsscorea.txt', "r+") file:     file.seek(0)     scores = file.readlines()  scores_pairs = [score.strip().split('\t') score in scores] avg_with_name=[] avg=[] name_list=[] last_3_scores=[]    score in reversed(scores_pairs):     name=score[0]     name_list.append(name)      item in name_list:         if name_list.count(name) > 1:             name_list.remove(name)             print(name_list)  item in name_list:     score in reversed(scores_pairs):         name=score[0]          if name == item , len(last_3_scores) <= 3:             last_3_scores.append(score[1])          elif len(last_3_scores) == 3:             print(last_3_scores)      items in last_3_scores:         item=int(items)         avg.append(item)         print(sum(avg))         mean=sum(avg)/len(last_3_scores)         avg_with_name.append([name,mean])         del last_3_scores[:]   name, average in reversed(avg_with_name):     print('{} average {}'.format(name,average)) 

i recommend doing this:

data = {} open('scores.txt') fobj:     line in fobj:         name, score = line.split()         data.setdefault(name, []).append(int(score))  name, scores in data.items():     avg = sum(scores[-3:]) / min(3, len(scores))     print('{} average {}'.format(name, avg)) 

output:

james average 10.0 zack average 5.0 max average 3.0 lenard average 4.0 

sorted average; highest first:

from operator import  itemgetter  name, scores in sorted(data.items(), key=itemgetter(1), reverse=true):     avg = sum(scores[-3:]) / min(3, len(scores))     print('{} average {}'.format(name, avg)) 

output:

james average 10.0 zack average 5.0 max average 3.0 lenard average 4.0 

Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -