Alex Hall wrote:
On 8/4/10, Evert Rol <evert....@gmail.com> wrote:
<snip>
That depends how you create the Pile of 52 cards: list(52) also doesn't
generate 52 (random) items.
If you override __init__ to accept an integer that generates the cards for
you, this should work.
Here is my init, not half as pretty as yours, but it should work.
Maybe this will explain the problem.

def __init__(self, size, cards=None, fill=False):
  #creates a pile of cards. If "fill"==true, it will auto-fill the
pile starting from the Ace of Clubs up through the King of Spades,
stopping if it exceeds the size arg.
  #if the cards arg is not null, it will populate the pile with the
cards in the list.
  self=[]
  if fill: #auto-fill, useful to generate a new, unshuffled deck
   for i in range(1, 14):
    for j in range(1, 5):
     self.append(Card(i, j))
    #end for
   #end for
   self=self[:size] #keep only the amount specified
  elif cards is not None: #fill the pile with the cards
   for c in cards:
    self.append(c)
   #end for
  #end if
 #end def __init__

You have two serious problems here, and maybe others, I didn't keep looking.

Since you never call super(), the init of the base class never happens. It may happen to work, since you're apparently willing to take its default behavior, but I don't know. But even worse, you never even talk to your own object. The first parameter to __init__() is a ref to the actual object you're supposed to be initializing, and you immediately overwrite it (self) with another object. As a result, everything else you do in that method is thrown out when the method returns. Remove that line

self = []

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to