2014-10-29 36 views
0

我正在Coursera中做一个迷你项目。 (Card是已宣布的其他地方其他类)。使用__str__打印对象的数组元素

class Deck:  
    def __init__(self): 
     self.deck = [] 
     for i in SUITS: 
      for j in RANKS: 
       self.deck.append(Card(str(i), str(j))) 
    def deal_card(self): 
     self.temp = random.randrange(0,52)   
     return(self.deck[self.temp]) 

    def __str__(self): 
     #TODO 

main() 
test_deck = Deck() 
c1 = test_deck.deal_card() 
print test_deck 

据我所知,名单self.deck包含卡对象的列表,谁能告诉我如何打印的self.deck的值(这个对象指的是)在我的__str__方法?

+2

你必须对你期望的输出字符串看起来更具体。如果你想要的文字相当于调用'print(self.deck)',只需'return str(self.deck)'。但除此之外,我们需要知道您的输出格式需要什么。 – aruisdante 2014-10-29 19:17:03

+1

你的问题的文字回答是'str(self.deck)',但我想你还在问更多。你期待什么作为输出? – 2014-10-29 19:21:05

+1

作为一个方面说明,你不应该在Python 2.x中使用'class Deck:';总是使用'class Deck(object):'。否则,你正在创建一个旧式的课程,这很糟糕。 (如果你想知道_why_这是不好的,你必须了解旧式类,以及许多其他你可能逃脱不了的东西,然后准备好去Python 3。x其中没有任何问题了......但如果您好奇,请搜索文档。) – abarnert 2014-10-29 19:24:17

回答

2

只需将其转换为字符串即可。

return str(self.deck) 
0

你也可以这样做:

def __str__(self): 
    return ','.join(str(x) for x in self.deck) 

后,各床板的卡实例必须有自己的STR方法重写,使其正确格式化过。

+0

如果您有新问题,请通过单击[问问题](http://stackoverflow.com/questions/ask )按钮。如果有助于提供上下文,请包含此问题的链接。 – Sir 2014-10-29 19:59:25

+0

这不是一个问题,而是一个答案,一个建议 – 2014-10-29 20:01:19

+0

伙计们,我很抱歉,但这是一个答案。我已经删除了您的快乐问号! – 2014-10-29 20:15:14

0

Python的Docs应该告诉你如何使用__str__

基本上当你这样做:

print something 

Python会自动调用的something__str__方法并写入到输出。

根据我的猜测,您可能想打印出这个对象是甲板的事实。所以,这样的事情可能是你想要什么:

class Deck: 
    # ... 
    def __str__(self): 
     return "Deck()" 

既然你正在学习Python的,我有一大堆的建议:

  1. 作为@abarnert说,当你在Python做class ABC: 2,这是一个老式的班级。 (更多here
  2. 尽管没有必要,但在每个函数之前应该有一个空行。
  3. 避免使用单字符变量名称。 (如ij

所以,你的代码(应该)看起来像:

class Deck(object): 

    def __init__(self): # Blank line above... 
     self.deck = [] 
     # Change variable names... 
     for suit in SUITS: 
      for rank in RANKS: 
       self.deck.append(Card(str(suit), str(rank))) 

    def deal_card(self): # Blank line above... 
     self.temp = random.randrange(0,52) 
     return(self.deck[self.temp]) 

    def __str__(self): 
     return "Deck()" 

最后,你可能想读this,这原来是同一页作为一个我之前连接过两次。