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
相关产品推荐
相关产品推荐

