A week ago I posted a simple little hi-score routine that I was using to learn Python.
I've only just managed to examine the code, and the responses that people gave, and I'm now seriously struggling to understand why things aren't working correctly. At present my code is as follows... import random import bisect class HiScores: def __init__(self,hiScores): self.hiScores=[entry for entry in hiScores] def showScores(self): for score,name in self.hiScores: score=str(score).zfill(5) 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=str(random.randint(0,10000)) if newScore > a.lastScore(): print "Congratulations, you scored %s " % newScore name=raw_input("Please enter your name :") a.addScore(newScore,name) a.showScores() if __name__=="__main__": main() My first problem (lack of understanding of course) is that if I run the above, I get an error saying: print "%s - %s" % name,score TypeError: not enough arguments for format string Now I understand what it's saying, but I don't understand why. If I change the code to read: print "%s - %n" % name, score (thinking of course that ah-ha, score is numeric) then I get the same error. The only way for the program to run is to simply have print name,score (or print score,name) The final part that's simply not working correctly is that the entire program isn't sorting the data. If I run the program and get a score of, say, 6789, then when I add my name, nothing is entered. I have changed the clause that deletes (pops) the last array if the array count is 6 and seen what figures are being entered into the array. Sure enough they are going in the array, and they are being sorted, but they are only being sorted AFTER the 00000 of the initial array creation. I'm pretty sure it's to do with comparing a string against an integer but can't for the life of me see where to force the comparrison to check against two integers. Apologies for going over old ground and if I'm not understanding, I'm getting there honest ;) -- http://mail.python.org/mailman/listinfo/python-list