WP a écrit :
Hello, here are some new things I've problems with. I've made a program
that opens and reads a text file. Each line in the file contains a name
and a score. I'm assuming the file has the correct format. Each
name-score pair is used to instantiate a class Score I've written. This
works fine, but here's my problem: After reading the file I have list of
Score objects. Now I want to sort them in descending order. But no
matter how I write my __cmp__ the order remains unchanged.
You fixed this, so I'll just comment on the rest of the code...
(snip)
Complete program:
class Score:
Unless you have a compelling reason (mostly: compat with ages old Python
versions), better to use new-style classes:
class Score(object):
def __init__(self, name_, score_):
self.name = name_
self.score = score_
cf Eric Brunel's comments here about the trailing underscores.
def __str__(self):
return "Name = %s, score = %d" % (self.name, self.score)
(snip)
name = ""
score = 0
Do you have any reason to have these as class attributes too ?
# End class Score
filename = "../foo.txt";
try:
infile = open(filename, "r")
except IOError, (errno, strerror):
print "IOError caught when attempting to open file %s. errno = %d,
strerror = %s" % (filename, errno, strerror)
exit(1)
cf Eric Brunel's comment wrt/ why this try/except clause is worse than
useless here.
lines = infile.readlines()
File objects are their own iterators. You don't need to read the whole
file in memory.
infile.close()
lines = [l.strip() for l in lines] # Strip away trailing newlines.
scores = []
for a_line in lines:
splitstuff = a_line.split()
scores.append(Score(splitstuff[0], int(splitstuff[1])))
scores = []
mk_score = lambda name, score : Score(name, int(score))
infile = open(filename)
for line in infile:
line = line.strip()
if not line:
continue
scores.append(mk_score(*line.split()))
infile.close()
As a side note : I understand that this is a learning exercice, but in
real life, if that's all there is to your Score class, it's not really
useful - I'd personnally use a much simpler representation, like a list
of score / name pairs (which is easy to sort, reverse, update, turn into
a name=>scores or scores=>names dict, etc).
My 2 cents.
--
http://mail.python.org/mailman/listinfo/python-list