0

playsユーザーが function の引数に挿入するすべての文字列を関数内の文字move()列に保持する関数を書きたいと思いundo_strますundo()。ここで何が欠けていますか?

class Sokoban:
        def __init__(self, board):
                self.board = board.copy()

        def move(self, plays):
             ............

        def undo(self):
                undo_str=""
                undo_str=undo_str[:]+plays
                self.undo=undo_str[:-1]
4

1 に答える 1

1

これがお役に立てば幸いです。情報を保持するためにさらにいくつかのクラス属性を追加すると、かなり簡単になります。ここで、initメソッドはsokoban.playsとsokobanundo_strを空の文字列として初期化します。sokoban.move('string')はsokoban.playsを'string'に変更し、sokoban.undo_str()は現在のsokoban.playsをsokoban.undo_strに追加します

class Sokoban:
    def __init__(self, board):
            self.board = board.copy()
            self.plays = ''
            self.undo_str = ''

    def move(self, plays):
         self.plays = plays
         ............

    def undo(self):
            undo_str=undo_str[:]+self.plays


sokoban = Sokoban(board)
sokoban.move('play1')
sokoban.undo()
sokoban.move('play2')
sokoban.undo()

In: sokoban.plays 
Out 'play2'

In: sokoban.undo_str
Out: 'play1play2'

(「self.undo = self.undo_str [:-1]」という行を削除したことに注意してください。これは関数self.undoと競合します)

于 2012-12-26T21:55:36.570 に答える