0

我是 Python 的新手,缺乏正规培训。我学到的一切都是通过书籍和我看过的一些视频。因此,虽然我理解了基本概念,但我仍然对许多更好的编码人员可能认为理所当然的一些事情感到困惑。所以我需要这方面的帮助。

我正在开发一个国际象棋程序,在创建棋子时,我想知道如何使用一个函数创建它们,但以后能够单独访问它们以更改它们各自的位置。我不能像我希望的那样将字符串变成变量。

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

然后我可以从列表中创建一个包含位置的一堆,但仍然可以将它们作为单独的对象访问。

4

2 回答 2

2

让自己更轻松的一种方法是不要让这些部分担心它们在哪里,而是将其委托给 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 回答