2013-02-08 2 views
0

Вот класс:Класс ошибки распределения

class Player: 
    #variables 
    hand = [] 
    name = 'Test Player' 
    #functions 
    def take(self, card): #allows player to take a card 
     self.hand.append(card) 
    def __str__(self): 
     msg = self.name 
     if len(self.hand) > 0: 
      msg = msg + "\nIn hand:" 
      for card in self.hand: 
       msg = msg + ' ' + card.short_name 
     return msg 

здесь функция:

def deal(players): 
    deck = Deck.generate_deck() 
    if len(players) <= 4: 
     for player in players: 
      for cards in range (0, 7): 
       card = random.choice(deck) 
       player.take(card) 
       deck.remove(card) 
    else: 
     for player in players: 
      for cards in range (0, 5): 
       card = random.choice(deck) 
       player.take(card) 
       deck.remove(card) 
    return deck 

Вот проблема. Когда я вызываю функцию для раздачи карт пяти игрокам, это то, что я получаю.

Player 1 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

Player 2 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

Player 3 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

Player 4 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

Player 5 
In hand: JC 2H KD 8H QD KH AS 10S QC 10H AH 6S JD 4H 5S 4S 9C 3C QH 9S AD 6D 8S 10C 7C 
25 

p.s. После этого число было небольшим отладочным в моем тестовом коде и не повлияло.

+1

возможно дубликат [ «Наименее Удивления» в Python: Мутабельный аргумент по умолчанию] (http://stackoverflow.com/questions/1132941/наименее удивление-в-питон-зе-изменяемые по умолчанию-аргумента) – bernie

ответ

3

Ваша проблема в том, что ваш список hand = [] прилагается к классу; это атрибут класса и разделяется между экземплярами.

Создать новый список для каждого игрока в __init__ метода:

class Player: 
    def __init__(self): 
     self.hand = [] 
Смежные вопросы