2013-11-27 141 views
0

我已經寫了一個功能來洗牌52張牌(整數列表),並將它們均勻地分配給4個不同的玩家,即4個玩家每個應該得到13張牌。然而由於某種原因,當我運行它時,所有玩家都會得到52張卡片,一個洗牌版本的卡片,有人可以提供一些幫助,以便如何修改下面的代碼以均勻地切割卡片並將其交給每個玩家?牌交易功能問題

def deal_cards(deck, Nplayers): 
    shuffle(deck) 
    cards = len(deck) 
    hands = Nplayers*[[]] 
    if Nplayers == 0: 
     return None 
    for card in range(cards): 
     player = card % Nplayers 
     hands[player].append(deck[card]) 

    return hands 

回答

0

您還沒有建立4所列出,你正在建設一個列表,引用4次:

hands = Nplayers*[[]] 

乘以列表不創造價值的複印件;而只複製參考;附加到hands[0]將反映在對同一列表的所有其他參考中。

使用列表理解:

hands = [[] for _ in range(Nplayers)] 

這將是最容易使用的切片:

def deal_cards(deck, Nplayers): 
    shuffle(deck) 
    l = len(deck) 
    portion = l // Nplayers 
    return [deck[i:i + portion] for i in range(0, len(deck), portion] 
+0

謝謝!很多幫助 – harryjmm