2017-04-19 7 views
-1

戦艦を構築しようとしました。私のBoardクラスの__str__メソッドは、リストのリストであるself.boardの文字列バージョンを出力します。私はクラスのmake_printable()メソッドを持っていて、self.boardを素敵でかわいい文字列にしています。Python:私の__str__メソッドは更新されたリストを出力しません

しかし、self.boardのインスタンスがゲーム内で船の配置を反映するように更新された場合、__str__は更新されたself.boardを表示しません。ここで何が起こっているか考えてみましょうか?

class Board: 
    """Docstring for class Board""" 

    def __init__(self): 
     self.board = [[EMPTY] * len(range(BOARD_SIZE)) for number in range(BOARD_SIZE)] 
     self.columns = " " + " ".join([chr(c) for c in range(ord('A'), ord('A') + BOARD_SIZE)]) 
     self.rows = '\n'.join(self.make_printable(self.board)) 

    def make_printable(self, board): 
     myobj = enumerate(self.board, start=1) 
     output = [] 
     for index, value in myobj: 
      output.append(' {:<2} {}'.format(index, ' '.join(value))) 
     return output 

    def __str__(self): 
     return self.columns + '\n' + self.rows 
+3

なぜ '__str__'は' self.columns'と 'self.rows'だけを使用するのですか?' self.board'を表示するのはなぜですか?あなたの '__str__'メソッドはあなたの' make_printable'メソッドを使用しません。 – CoryKramer

+0

ようこそStackOverflow。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。投稿されたコードはクラス定義のみで、問題を説明するドライバはありません。 – Prune

+0

'__init__'で定義された' self.rows'は 'make_printable()'の結果を含んでいませんか? – empathyattack

答えて

0

@Deliothなどの入力によって解決策がわかりやすくなりました。

self.rowsBoardオブジェクトのインスタンス化時に作成され、二度と更新され、それは見栄えの良い文字列にすべての「Oさんのリストのリストを操作した結果ですので、__str__があるときに、同じ空のボードが表示されます後で呼ばれる。それは、オブジェクトのインスタンス化にあったとしてmake_printable()以来

は、それが現在のように(つまり、ゲームの過程で更新された、おそらく後)self.boardに取るのではなく、解決策はmake_printableのコールを返す__str__()持っていることですが、 .join()改行を編集したものがself.rowsであったため、ボードの見た目がよくなりました。

だからここで私たちはこれで始まった:あなたの助けと忍耐のために貢献したすべての人へ

class Board: 
"""Docstring for class Board""" 

def __init__(self): 
    self.board = [[EMPTY] * len(range(BOARD_SIZE)) for number in range(BOARD_SIZE)] 
    self.columns = " " + " ".join([chr(c) for c in range(ord('A'), ord('A') + BOARD_SIZE)]) 

def make_printable(self, board): 
    myobj = enumerate(self.board, start=1) 
    output = [] 
    for index, value in myobj: 
     output.append(' {:<2} {}'.format(index, ' '.join(value))) 
    return output 

def __str__(self): 
    return self.columns + '\n' + ('\n'.join(self.make_printable(self.board))) 

ありがとう:私たちは、今、これを持って

class Board: 
"""Docstring for class Board""" 

def __init__(self): 
    self.board = [[EMPTY] * len(range(BOARD_SIZE)) for number in range(BOARD_SIZE)] 
    self.columns = " " + " ".join([chr(c) for c in range(ord('A'), ord('A') + BOARD_SIZE)]) 
    self.rows = '\n'.join(self.make_printable(self.board)) 

def make_printable(self, board): 
    myobj = enumerate(self.board, start=1) 
    output = [] 
    for index, value in myobj: 
     output.append(' {:<2} {}'.format(index, ' '.join(value))) 
    return output 

def __str__(self): 
    return self.columns + '\n' + self.rows 

関連する問題