python - ValueError: max() arg is an empty sequence again -
my code follows presents me error message saying
valueerror: invalid literal int() base 10: '4\njohn'" on line
players.append(player(elems[e], list(map(int, elems[e+1:e+4])))) code:
from __future__ import division operator import attrgetter class player(object): def __init__(self, name, scores): self.name = name self.scores = scores self.highscore = max(scores) self.avgscore = sum(scores) / 3 open('classfilea.txt') f: l in f: l = l.strip(); # remove end of line char (\n) text = f.read() players = [] elems = text.split(',') e in range(0,len(elems),4): players.append(player(elems[e], list(map(int, elems[e+1:e+4])))) byhighscore = sorted(players, key=attrgetter('highscore'), reverse=true) byavg = sorted(players, key=attrgetter('avgscore'), reverse=true) print('') p in byhighscore: print('{0} {1:g}'.format(p.name, p.highscore)) print('') p in byavg: print('{0} {1:g}'.format(p.name, p.avgscore)) my code supposed sort data sorted :
ahmed,1,6,4 john,5,3,5 kali,5,4,7 larry,4,7,6 by highest score , average score
edited code :
from __future__ import division operator import attrgetter class player(object): def __init__(self, name, scores): self.name = name self.scores = scores self.highscore = max(scores) self.avgscore = sum(scores) / 3 open('classfilea.txt') f: l in f: l = l.strip(); # remove end of line char (\n) text = f.read() players = [] elems = text.split(',') e in range(0,len(elems),4): players.append(player(elems[e], list(map(int, elems[e+1:e+4])))) byhighscore = sorted(players, key=attrgetter('highscore'), reverse=true) byavg = sorted(players, key=attrgetter('avgscore'), reverse=true) print('') p in byhighscore: print('{0} {1:g}'.format(p.name, p.highscore)) print('') p in byavg: print('{0} {1:g}'.format(p.name, p.avgscore)) now code informing me score empty. printed score in separate page , prints "[]" have been informed due logic of code. "for l in f loop. after current file pointer @ end of file, following f.read() won't data. pm2ring said: "you need reorganize logic of code"
when add list strings score:
players.append(player(elems[0], map(int, elems[1:]))) , , try obtain max:
self.highscore = max(scores) you obtain error you've mentioned. @ point in code:
line in f: elems = line.split(',') players.append(player(elems[0], map(int, elems[1:]))) you need make sure "elems[1:]" not carry strings. it's parsing problem file. if have 4 elements each person (name , 3 numbers) give instruction while building line:
in range(len(elems)//4): players.append(player(elems[4*i], map(int, elems[4*i+1:4*(i+1)]))) also advise remove "map" since not have "len", or replace replace:
self.avgscore = sum(scores) / len(scores) by:
self.avgscore = sum(scores) / 3 if length of scores 3.
Comments
Post a Comment