2012-07-30 45 views
-1

我对此很陌生,我不知道如何解决问题。我有一个经销商,然后它会问一开始会有多少玩家会玩。然后每个玩家和经销商从甲板上获得2张牌。问题是,例如,如果我有三名球员,代码将在下一个球员中列出以前的两张牌。我如何区分每个列表

+0

见http://stackoverflow.com/questions/8469043/troubles-making-a-python-program-to-deal-cards/8469173 #8469173 – Benjamin 2012-07-30 16:28:57

回答

1

您需要重置每位玩家的牌。所以,你的第二个循环应该更像:

for i in range(players): 
    hand = [] 
    for j in range(2): 
     c = deck.pop() 
     hand.append(c) 
    print "Player " + str(i+1) + ":" 
    print "Cards: " + cards.hand_display(cards) 

否则hand将继续追加。

2

您可能想要每个玩家列表。字典可能会做的工作,是这样的:

hands = {} 
... 
for player in players: 
    hand = hands[player] = [] 
    for j in range(2): 
     c = deck.pop() 
     hand.append(c) 


for player in players: 
    print('{}: {}'.format(player, ', '.join(hands[player]))) 
0

你的手是一个数组,所以你只追加新卡相同的数组,每次打印的手时,你打印相同数组,只有在开始时它只有2个卡,然后是4,然后是6.

你应该做的是使用字典或数组数组。

0
import random 

class Cards(object): 
    suit = ['H', 'D', 'S', 'C'] 
    value = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'] 

    def __init__(self): 
     self.deck = [v+s for s in Cards.suit for v in Cards.value] 

    def shuffle(self): 
     random.shuffle(self.deck) 

    def deal(self, n): 
     res, self.deck = self.deck[:n], self.deck[n:] 
     return res 

show_hand = ' '.join 

def main(): 
    num_players = 3 
    deck = Cards() 
    deck.shuffle() 

    dealer = deck.deal(2) 
    players = [deck.deal(2) for i in xrange(num_players)] 

    print('Hands:') 
    print(' Dealer: {}'.format(show_hand(dealer))) 
    for i in xrange(num_players): 
     print('Player {}: {}'.format(i+1, show_hand(players[i]))) 

if __name__=="__main__": 
    main() 

结果

Hands: 
    Dealer: JH 9H 
Player 1: AS 2D 
Player 2: QD 8H 
Player 3: 10H 6D 
0

与您的代码(现已被删除)的问题是,你被追加为每个玩家的手牌相同的列表。简单的解决方法是只重置循环顶部的变量。

由于您在玩游戏时可能需要跟踪所有的手,因此创建一个单独的列表列表(其中包含一个经销商手中的子列表以及每个玩家的单独列表)是有意义的。这些可以存储在列表中并根据需要索引。

您打电话给玩家:玩家1,玩家2等,实际上是从1开始编号,因此可以将经销商的手存储在索引0中,并将玩家1的牌放在手中[玩家+ 1]等等。下面是一些示例代码:

#### testing scaffold ####################### 
import random 

class Cards(object): 
    def __init__(self): 
     deck = self._deck = [] 
     for rank in "A23456789JQK": 
      for suit in "CDHS": 
       deck.append(rank+suit) 

    def deck(self): 
     return self._deck 

    def hand_display(self, player_num): 
     return ' '.join(hands[player_num]) 

cards = Cards() 
players = 3 
########################################## 

deck = cards.deck() 
random.shuffle(deck) 
hands = [[]] # for dealer's hand 
hands.extend([] for player in range(players)) # for each player's hand 
DEALER = 0 
CARDS_PER_HAND = 2 

print "Hands:" 
for i in xrange (CARDS_PER_HAND): 
    cd = deck.pop() 
    hands[DEALER].append(cd) 
print "Dealer: " + cards.hand_display(DEALER) 

for player_num in [player+1 for player in range(players)]: 
    for j in xrange(CARDS_PER_HAND): 
     c = deck.pop() 
     hands[player_num].append(c) 
    print "Player " + str(player_num) + ":" 
    print "Cards: " + cards.hand_display(player_num) 

输出:

Hands: 
Dealer: 6H 5H 
Player 1: 
Cards: 7H 3H 
Player 2: 
Cards: 4D JD 
Player 3: 
Cards: 3S 4S 
相关问题