I've restructured my code with the assistance of George and Mike which is now as follows...
import random class HiScores: def __init__(self,hiScores): self.hiScores=[(entry[:5],entry[5:]) for entry in hiScores] def showScores(self): for name,score in self.hiScores: print "%s - %s" % name,score def addScore(self,score,name): score.zfill(5) bisect.insort(self.hiScores,(score,name)) if len(self.hiScores)==6: self.hiScores.pop() def lastScore(self): return self.hiScores[-1][0] def main(): hiScores=[('10000','Alpha'),('07500','Beta'),('05000','Gamma'),('02500','Delta'),('00000','Epsilon')] a=HiScores(hiScores) print "Original Scores\n---------------" a.showScores() while 1: newScore=random.randint(0,10000) if newScore.zfill(5) > a.lastScore(): print "Congratulations, you scored %d " % newScore name=raw_input("Please enter your name :") a.addScore(newScore,name) a.showScores() if __name__=="__main__": main() However doing like the above (which DOES make sense now) raises a few questions that I've been struggling to find answers for over several hours now. 1) The most important is that when run, the program crashes with Traceback (most recent call last): File "D:\My Documents\Development\Python\highscore1.py", line 35, in -toplevel- main() File "D:\My Documents\Development\Python\highscore1.py", line 28, in main if newScore.zfill(5) > a.lastScore(): AttributeError: 'int' object has no attribute 'zfill' I've read as many websites as I can about zfill and I can't see why on earth it's failing. 2) The output of the predefined hiscores is now... 10000 - Alpha () 07500 - Beta () 05000 - Gamma () 02500 - Delta () 00000 - Epsilon () Why are there the pairing parenthesis there? George very kindly showed me another way which was to have... def showScores(self): for entry in self.hiScores: print entry[0:5]," - ",entry[5:] But using that method output the entire list in it's full format (sorry if that's not the correct terminology). But give me a small plus mark for changing code and not simply copying George :) 3) The hardest thing to 'understand' is the line... self.hiScores=[(entry[:5],entry[5:]) for entry in hiScores] I 'understand' what it's doing, but I don't quite comprehend what the :5 and 5: do. I know that the :5 is technically saying from the start to position 5, and likewise the 5: would say from position 5 onwards, but I just can't get my head around how this works. TIA -- http://mail.python.org/mailman/listinfo/python-list