0

私は Python の初心者であり、正式なトレーニングを受けていません。私が学んだことはすべて、本と私が見たいくつかのビデオを通してでした. そのため、基本的な概念は理解していますが、多くの優れたコーダーが当然のことと考えているいくつかのことにまだ問題があります。だから私はこれについて助けが必要です。

私はチェスのプログラムに取り組んでいました。ポーンを作成しているときに、ポーンをすべて 1 つの関数で作成し、後で個別にアクセスして個々の位置を変更できるようにする方法を考えました。私が望んでいたように、文字列を変数にすることはできません。

class Name(object):
    def __init__(self, posx, posy, posz):
        self.pos= (posz, posy, posz)
        box(pos=self.pos)

次に、リストから位置をまとめて作成できますが、それらすべてに個別のオブジェクトとしてアクセスできます。

4

2 に答える 2

2

自分で簡単にする方法の 1 つは、ピースがどこにあるかを気にせず、代わりに Board オブジェクトに委譲することです。

import string

class Piece(object):
    def __init__(self, type, colour):
        self.type = type
        self.colour = colour
    def __str__(self):
        return 'Piece(%(type)s, %(colour)s)' % self.__dict__

class Board(dict):
    def __init__(self, width, height):
        self.update(
            dict(((x,y), None) 
                for x in string.ascii_lowercase[:width] # alphabetic axis 
                for y in xrange(1, height+1)            # numeric axis
            )
        )

    def setup(self, position_seq):
        for type, colour, position in position_seq:
            self[position] = Piece(type, colour)

initial_positions = [
    ('rook', 'W', ('a', 1)),
    ('knight', 'W', ('b', 1)),
    ('bishop', 'W', ('c', 1)),
    ('queen', 'W', ('d', 1)),
    ('king', 'W', ('e', 1)),
    ('pawn', 'W', ('a', 2)),
]

b = Board( 8,8 )
b.setup( initial_positions )
print b['a',1] # returns Piece(rook, W)

Boardのsetupメソッドはタプルのリストを受け取ります。各タプルには、新しいピースをインスタンス化するために必要なデータが含まれており、ボード上のどこに配置するかを指定します。再帰は必要ありません。データをクラスに渡す単純なループだけです。

于 2012-08-28T05:38:00.767 に答える
0

それらにどのようにアクセスしますか? 文字列キーでそれらにアクセスしたい場合、最も簡単な方法はそれらを辞書に入れることです。ただし、これが実際にやりたいことかどうかはわかりません。より一般的な方法は、それらをリストに入れることです。

于 2012-08-28T02:33:08.713 に答える