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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:55:06