Python扑克牌游戏代码咨询:列表添加与打印方法疑问
问题解答
1. 你是否正确地将cards(value, suit)添加到列表中?
整体逻辑是没问题的——你确实成功创建了每个花色与点数组合的Playing_Cards实例,并把它们都添加到了deck_of_cards列表里。不过有个小细节可以优化:你在代码里重复声明了两次deck_of_cards=[],第二次声明会覆盖第一次的空列表,虽然这不影响最终的添加操作,但删掉其中一个能让代码更简洁。
至于打印出来全是<__main__.Playing_Cards object at ...>,不是因为你没把卡片加进去,而是Python默认不知道怎么展示自定义类的实例,只能输出它的类型和内存地址而已。
2. 如何正确打印列表deck_of_cards中的内容?
要让Python能输出卡片的具体信息,你需要给Playing_Cards类添加__str__或__repr__方法——这两个方法用来定义类实例被转换为字符串时的表现形式:
__str__:面向普通用户,返回易读的描述文本__repr__:面向开发者,返回精确、可重现的实例描述(列表打印时默认会调用每个元素的__repr__)
修改后的完整代码示例:
from enum import Enum, IntEnum # 合并导入语句更简洁 class Suits(Enum): DIAMONDS = "diamonds" HEARTS = "hearts" SPADES = "spades" CLUBS = "clubs" class Values(IntEnum): TWO = 2 THREE = 3 FOUR = 4 FIVE = 5 SIX = 6 SEVEN = 7 EIGHT = 8 NINE = 9 TEN = 10 JACK = 11 QUEEN = 12 KING = 13 ACE = 14 class Playing_Cards(): def __init__(self, card_value, card_suit): self.card_value = card_value self.card_suit = card_suit def __str__(self): # 返回用户友好的卡片描述,比如"Two of Diamonds" return f"{self.card_value.name.title()} of {self.card_suit.value.title()}" def __repr__(self): # 返回开发者友好的实例信息,方便调试 return f"Playing_Cards({self.card_value!r}, {self.card_suit!r})" deck_of_cards = [] for suit in Suits: for value in Values: deck_of_cards.append(Playing_Cards(value, suit)) # 打印列表时会调用每个元素的__repr__,输出调试友好的信息 print(deck_of_cards) # 如果想打印更贴近日常阅读的格式,可以遍历列表打印每个元素的__str__ print("\n--- 易读格式输出 ---") for card in deck_of_cards: print(card)
这样修改后,你再打印deck_of_cards时,就能看到清晰的卡片信息,而不是晦涩的对象地址了。
内容的提问来源于stack exchange,提问作者user9421069
相关产品推荐
相关产品推荐

