You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类实现双人多A胜纸牌游戏 统计Ace数量判定获胜者问题

双人Ace纸牌游戏代码修正

现有代码核心问题

  • 构造Card实例时参数传反:Deck类make方法创建Card对象时,将花色、牌值参数顺序传反,导致牌的属性存储完全错误
  • 统计Ace的方法逻辑错误:Player.ace_cards方法遍历了初始值为0的self.ace属性而非手牌列表,且错误将整个手牌转为字符串判断,无法正常统计Ace数量
  • 发牌逻辑错误:代码中给每名玩家发了6张牌,不符合需求的5张
  • 缺少依赖导入:没有导入random模块,洗牌功能会直接报错
  • 缺失胜负判定逻辑:最后没有对两名玩家的Ace数量做比较、输出赢家的逻辑

修正后可直接运行的完整代码

import random

class Card:
    def __init__(self, rank, suit):
        self.suit = suit
        self.rank = rank
        
    def get_rank(self):
        if self.rank == 1:
            trueRank = "Ace"
        elif self.rank == 11:
            trueRank = "Jack"
        elif self.rank == 12:
            trueRank = "Queen"
        elif self.rank == 13:
            trueRank = "King"
        else:
            trueRank = str(self.rank)
        return f"{trueRank} of {self.suit}"
       
    def display(self):
        print(f"{self.rank} of {self.suit}")
    
class Deck:
    def __init__(self):
        self.cards = []
        self.make()
        
    def make(self):
        # 修正Card参数顺序:第一个传牌值rank,第二个传花色suit
        for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
            for v in ['Ace','2','3','4','5','6','7','8','9','10','Jack','Queen','King']:
                self.cards.append(Card(v, s))
    def display(self):
        for c in self.cards:
            c.display()
    def shuffle(self):
        for i in range(len(self.cards) - 1, 0, -1):
            r = random.randint(0,i)
            self.cards[i], self.cards[r] = self.cards[r], self.cards[i]
    def deal(self):
        return self.cards.pop()

class Player:
    def __init__(self, name):
        self.name = name
        self.hand = []
        
    def add(self, deck):
        self.hand.append(deck.deal())
        return self
    
    def ace_cards(self):
        count = 0
        # 遍历手牌统计Ace数量
        for card in self.hand:
            if card.rank == 'Ace':
                count += 1
        return count
    
    def display(self):
        for card in self.hand:
            card.display()

def main():
    # 创建牌堆并洗牌
    deck = Deck()
    deck.shuffle()
      
    # 初始化两名玩家
    player1 = Player('玩家1')
    player2 = Player('玩家2')
    
    # 各发5张牌
    for _ in range(5):
        player1.add(deck)
        player2.add(deck)
    
    # 展示双方手牌
    print('玩家1的手牌:')
    player1.display()
    print('\n玩家2的手牌:')
    player2.display()
    
    # 统计Ace数量
    p1_ace = player1.ace_cards()
    p2_ace = player2.ace_cards()
    print(f'\n双方Ace持有数量:\n玩家1:{p1_ace}张\n玩家2:{p2_ace}张')
    
    # 判定胜负
    print('\n胜负结果:')
    if p1_ace > p2_ace:
        print(f'{player1.name}获胜!')
    elif p2_ace > p1_ace:
        print(f'{player2.name}获胜!')
    else:
        print('双方Ace数量相同,平局!')

if __name__ == '__main__':
    main()

内容的提问来源于stack exchange,提问作者gart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:06:06