Struggling with basics

Jason jason at jasonmhirst.co.uk
Sun Sep 25 20:37:32 CEST 2005


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 ;)




More information about the Python-list mailing list