簡體   English   中英

Append 列表的每個第二個元素(Python)

[英]Append every 2nd element of list (Python)

我正在做一個紙牌游戲挑戰。 我做了 3 個類:“卡片:”class,“甲板:”class,和“玩家:”class。

在牌組中 class 是一個 function 來創建一個裝滿玩家牌的牌組(列表) class 是一個空列表(例如“self.hand = []”)

為了節省篇幅,我不會展示所有類的完整代碼,但這里是關鍵部分:

在甲板 class 中:

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

在播放器 class 中:

# 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 的甲板的前半部分)。 任何人都可以幫助修復嗎? 謝謝!

在你的牌組 class 中,添加一個接受玩家列表的 function 並使用模數在玩家之間交替。

獎勵:在達到每個玩家的最大牌數后,接受一個 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM