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
Post a Comment