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. >Apologies for going over old ground and if I'm not understanding, I'm >getting there honest ;) > > > HTH, Peter -- http://mail.python.org/mailman/listinfo/python-list