2014-10-29 37 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,這原來是同一頁作爲一個我之前連接過兩次。