python的新手,尝试创建卡片组并希望为print(deck)=>实现一种打印方法,该方法给出了我的卡片的打印列表。
我的类PlayingCard具有str方法,该方法可以很好地打印单张纸牌。
但是,当我创建Deck.cards对象(这是PlayingCard对象的列表)时,似乎无法一次打印所有纸牌。
试着更换海峡与再版。尝试返回str中的字符串列表
from enum import Enum
class Value(Enum):
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 Suit(Enum):
Spades = 1
Hearts = 2
Clubs = 3
Diamonds = 4
class PlayingCard():
def __init__(self,value,suit):
self.value = value
self.suit = suit
def __str__(self):
return '{} of {}'.format(Value(self.value).name, Suit(self.suit).name)
class Deck():
def __init__(self):
self.cards=[PlayingCard(val,suit) for val in Value for suit in Suit]
def __str__(self):
return str(self.cards)
Run Code Online (Sandbox Code Playgroud)
deck = Deck()
print(deck)
Run Code Online (Sandbox Code Playgroud)
退货
[<__main__.PlayingCard object at 0x000001875FEC0080>,
<__main__.PlayingCard object at 0x000001875FE9EE48>,
....
....
]
Run Code Online (Sandbox Code Playgroud)
您只需要将类__str__的方法替换PlayingCard为__repr__方法即可:
class PlayingCard():
def __init__(self,value,suit):
self.value = value
self.suit = suit
def __repr__(self):
return '{} of {}'.format(Value(self.value).name, Suit(self.suit).name)
Run Code Online (Sandbox Code Playgroud)
或者,您可以更改类__str__中的方法Deck来获取每张卡的字符串表示形式:
class Deck():
def __init__(self):
self.cards=[PlayingCard(val,suit) for val in Value for suit in Suit]
def __str__(self):
return str([str(card) for card in self.cards])
Run Code Online (Sandbox Code Playgroud)
然后你会得到正确的输出:
...
deck = Deck()
print(deck)
Run Code Online (Sandbox Code Playgroud)
输出:(
第二种方式将在每张打印的卡片周围添加引号)
[黑桃二、红心二、梅花二、方块二、黑桃三、红心三、梅花三、方块三、黑桃四、红心四、梅花四、方块四、五黑桃 5、梅花 5、方块 5、黑桃 6、红心 6、梅花 6、方块 6、黑桃 7、红心 7、梅花 7、方块 7、黑桃 8、红心八、梅花八、方块八、黑桃九、红心九、梅花九、方块九、黑桃十、红心十、梅花十、方块十、黑桃杰克、杰克红心、梅花 J、方块 J、黑桃 Q、红心 Q、梅花 Q、方块 Q、黑桃 K、红心 K、梅花 K、方块 K、黑桃 A、红心 A、梅花 A、方块 A]
当您调用__str__一个list对象时,它将遍历列表中的每个元素并调用__repr__该对象以获取其表示形式。
因此,当您致电 时print(deck),您会得到:
--> deck.__str__()
--> str(self.cards)
--> [card.__repr__() for card in self.cards]
Run Code Online (Sandbox Code Playgroud)