Struggling with basics

Peter peter at commonlawgov.org
Sun Sep 25 16:28:04 EDT 2005


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




More information about the Python-list mailing list