我正在尝试构建一个程序来模拟纸牌游戏的规范教学编程练习。这是我有多远:
class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
self.card = str(self.suit) + " " + str(self.rank)
class Deck:
def __init__(self):
self.deck = []
def Deck_Maker(self):
ranks = range(1, 11) + ["J", "Q", "K", "A"]
suits = ["Club", "Heart", "Spade", "Diamond"]
return self.deck.append(Card(suits[0], ranks[0]))
Run Code Online (Sandbox Code Playgroud)
显然我还没有完成,我必须遍历套装和等级来构建套牌。但是,在继续之前,我想检查一下我是否走上正轨。为此,我想在调用 Deck_Maker 方法后打印结果。我试图用下面的代码来做到这一点......
def __str__(self):
d = self.deck
d2 = d.Deck_Maker()
return str(d2)
Run Code Online (Sandbox Code Playgroud)
不幸的是,print(Deck().Deck_Maker())返回None.
我究竟做错了什么?更一般地说,程序员如何在创建类和方法时在它们内部闲逛?
谢谢!
列表上的 append 方法返回 None 所以这是预期的。尝试拆分您的线路:
deck = Deck()
deck.Deck_Maker()
print(deck)
Run Code Online (Sandbox Code Playgroud)
或将方法 Deck_Maker 更改为:
def Deck_Maker(self):
ranks = range(1, 11) + ["J", "Q", "K", "A"]
suits = ["Club", "Heart", "Spade", "Diamond"]
self.deck.append(Card(suits[0], ranks[0]))
return self
Run Code Online (Sandbox Code Playgroud)
编辑:您的str方法中也存在问题。当您将 d 设置为 self.deck 时,您将其设置为一个列表。该列表对 Deck_Maker 方法一无所知。尝试更改为下面的方法。这会将您的列表变成一个字符串。为了使其更具可读性,您可能还想向 card 类添加一个 str 方法。
def __str__(self):
return str(self.deck)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3823 次 |
| 最近记录: |