我对此很陌生,我不知道如何解决问题。我有一个经销商,然后它会问一开始会有多少玩家会玩。然后每个玩家和经销商从甲板上获得2张牌。问题是,例如,如果我有三名球员,代码将在下一个球员中列出以前的两张牌。我如何区分每个列表
-1
A
回答
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
相关问题
- 1. 如何可以平行为MySQL分区表的每个分区
- 2. 如何分隔每个分区?
- 3. 如何区分这个Python列表?
- 4. 我该如何分区这个表格?
- 5. 如何区分两个表
- 6. 如何在Oracle 12c中基于一个Integer列(每个值= 1分区)创建分区表?
- 7. 分区的超集,让原来的集列表中的每个分区
- 8. Oracle 12c - 如何查看某个表的所有分区和子分区以及每个分区的记录数
- 9. 分区表,我的硬盘上的不同磁盘上的每个分区
- 10. 我将如何区分我的键/值对列表
- 11. 如何按每个元素的属性对列表进行分区
- 12. Mysql分区 - 如何对包含唯一列的表进行列表分区?
- 13. 如何使用LINQ来区分列表?
- 14. 如何将包含日期的列表拆分为每周分区
- 15. 我将如何为列表中的每个值分配一个变量
- 16. Android:我如何为每个ListView列表项分配一个单独的图标?
- 17. 我如何排序列表分为2分或多个列
- 18. 如何拆分每个第N个元素的Python列表
- 19. 如何使一个列表分成每一个元素,使子列表
- 20. 分区MySQL表列
- 21. 列表列表;我如何将每个值链接到新列表?
- 22. 我如何使它自动?我如何分类列表中的每组索引?
- 23. 我如何找到给定列表的分区?
- 24. 我如何区分列表中的项目在c#
- 25. 我如何区分一个分支与我的默认分支
- 26. 如何知道哪个分区列是
- 27. Google BigQuery分区表 - 如何每天自动创建表?
- 28. 如何将列表中的每个元素与R中另一个列表中的每个元素分开?
- 29. 我如何分配全局阵列中的每个文件名?
- 30. 我有一个数字列表,如何生成所有独特的K分区?
见http://stackoverflow.com/questions/8469043/troubles-making-a-python-program-to-deal-cards/8469173 #8469173 – Benjamin 2012-07-30 16:28:57