将列表的每2个元素附加一次(Python)



我正在进行一项纸牌游戏挑战。我上了三节课:;卡片:";类;甲板:";类和一个"类";玩家:"班

在牌组类中,有一个函数可以创建一个装满牌的牌组(列表(在播放器类中是一个空列表(例如"self.hand=[]"(

为了节省空间,我不会显示所有类的完整代码,但以下是关键部分:

甲板类:

# Deal one card
def deal_one(self):
return self.deck.pop(0)

在播放器类中:

# Take a card:
def take(self, new_cards):
if type(new_cards) == type([]):
self.hand.extend(new_cards)
else:
self.hand.append(new_cards)

创建2名玩家并将牌组从他们中间分开是很容易的,如下所示:

for card in range(26):
pl_1.take(mydeck.deal_one())
pl_2.take(mydeck.deal_one())

但作为一种挑战,我想把每一张牌都发给每一位玩家。我试过这个:

for card in mydeck.deck[::2]:
pl_1.take(mydeck.deal_one())

但这返回了与第一个代码相同的结果(给玩家1的牌组的前半部分(。有人能帮忙解决吗?谢谢

在您的deck类中,添加一个接受玩家列表的函数,并使用模在玩家之间交替。

奖励:在达到每位玩家的最大牌数后,接受一个int来打破for循环。

def takeAlternate(players : list, maxCardsPerPlayer : int = 0):
numPlayers = len(players)
currentCard = 0
currentPlayer = 0
for card in self.deck:
currentPlayer = currentCard % numPlayers
# move card from deck to player
players[currentPlayer].takeCard(card)
self.deck.remove(card)
currentCard += 1
if maxCardsPerPlayer != 0 and currentCard >= maxCardsPerPlayer * numPlayers:
break

最新更新