Peter wrote: > Peter wrote: > >> Jason wrote: >> >> >> >>> 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) >>> >>> >>> >> >> This is because 'print' is accepting 'score' as a seperate argument, >> not the formatting, as you want it to. >> Try 'print "%s - %s" % (name, score)' >> >> >> >> >>> 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. >>> >>> >>> >>> >> >> Humm. This is a harder problem. I will copy this text into JEdit to >> highlight the text and see if i cannot find the problem. >> >> >> > Correction: I will fix my apearently semi-broaken Python installation > wich gives me undefined reference errors from math.h and then see if i > cannot fix the problem. -.- > Well, My Python2.4 may have a broken math module, but my Python2.3 only has a broken cPickle. *Kicks computer*.
Try changing pop() to pop(0) and it should work. string.pop by default removes the last element appended to the list, you want the first, which is the oldest. >>> Apologies for going over old ground and if I'm not understanding, >>> I'm getting there honest ;) >>> >>> >>> >>> >> >> >> HTH, >> Peter >> >> >> > Peter > > > HTH, Peter -- http://mail.python.org/mailman/listinfo/python-list