I've just started using classes in Python.

The basic goal is to develop a script that tracks individual player stats for 
poker tournaments.  This involves nesting a class within a class within a 
class.  The Player class incorporates a Stats class (three instances for three 
different game types) and the Stats class incorporates a Details class (three 
instances for three different game phases).

In creating a Player instance,  that instance can create the Stats class, but 
when creating the first instance within the Stats class of a Details class, it 
fails with the following traceback:

Traceback (most recent call last):
  File 
"C:\Python25\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 
309, in RunScript
    debugger.run(codeObject, __main__.__dict__, start_stepping=0)
  File "C:\Python25\Lib\site-packages\pythonwin\pywin\debugger\__init__.py", 
line 60, in run
    _GetCurrentDebugger().run(cmd, globals,locals, start_stepping)
  File "C:\Python25\Lib\site-packages\pythonwin\pywin\debugger\debugger.py", 
line 624, in run
    exec cmd in globals, locals
  File "C:\Documents and Settings\Mike and Patsy\Desktop\pk\pkutilities.py", 
line 140, in <module>
    initplayers(playernames)
  File "C:\Documents and Settings\Mike and Patsy\Desktop\pk\pkutilities.py", 
line 119, in initplayers
    gameplayers[name] = Player(name)
  File "C:\Documents and Settings\Mike and Patsy\Desktop\pk\pkutilities.py", 
line 8, in __init__
    self.stat[0] = Stats('holdem', name)
  File "C:\Documents and Settings\Mike and Patsy\Desktop\pk\pkutilities.py", 
line 29, in __init__
    self.gamephase[0] = Details('full')
IndexError: list assignment index out of range


The appropriate code segments defining the classes and the calling function 
follow:

class Player():

    def __init__(self,name):
        self.name = name
        self.stat[0] = Stats('holdem', name)
        self.stat[1] = Stats('omahah', name)
        self.stat[2] = Stats('omahahl', name)
        

class Stats():
    
    def __init__(self, type, name):
        self.name = name
        self.gametype = type
        self.totalgames = 0
        self.totalgamestofinish = 0
        self.totalfinish = 0
        self.gamephase[0] = Details('full')    # this is the line which fails
        self.gamephase[1] = Details('mid')
        self.gamephase[2] = Details('end')

class Details():
    def __init__(self, type):
        self.type = type
        self.totalhands = 0
        self.VPIPhands = 0
        self.VPIPcount = 0
        self.VPSBhands = 0
        self.VPSBcount = 0
        self.flopseen = 0
        self.turnseen = 0
        self.riverseen = 0
        self.preflopraise = 0
        self.flopraise = 0
        self.turnraise = 0
        self.riverraise = 0
        self.winpreflop = 0
        self.winflop = 0
        self.winturn = 0
        self.winriver = 0

# this is the function that creates the Player instance
def initplayers(playernames):
    global db, gameplayers

    db = shelve.open('playerstats.dat')
    for i in range(len(playernames)):
        name = playernames[i]
        if db.has_key(name):
            gameplayers[name] = db[name]
        else:
            gameplayers[name] = Player(name)   # this line creates the Player 
instance
            db[name] = gameplayers[name]

I don't see how the "list assignment index" can be out of range, so I assume 
there's an earlier error that I can't find or a syntax error that I'm 
overlooking.

Can anyone point out where I'm going wrong?

And, if you can recommend a better way to organize the data, feel free.

Thanks for your help.

Mike
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to