我正在用python实现一个跳棋游戏板。以下是我如何将板结构生成为[8] [8]数组:
_matrix = []
for i in xrange(8):
_matrix.append( [' '] * 8 )
for row in xrange(0, 8):
for col in xrange(0, 8):
if _darkQuad(row, col) == True:
_matrix[row][col] = '#'
else:
_matrix[row][col] = '-'
def _darkQuad(row, col):
return ((row%2) == (col%2))
def _printDebugBoard():
for row in xrange(0, 8):
for col in xrange(0, 8):
print _matrix[row][col]
print ''
这应该像我的董事会一样:
# - # - # - # - - # - # - # - # ...
但结果是:
- - - - - - - -
# # # # # # # #
- - - - - - - -
# # # # # # # #
- - - - - - - -
# # # # # # # #
- - - - - - - -
# # # # # # # #
怎么了?
UPD : 嗯,我认为这不重要。我使代码更容易,但这是我使用的确切代码:
class gameSquare(object):
def __init__(self):
self.validSquare = False
self.symbol = ''
def printSymbol(self):
print self.symbol,
-------
def _validateSquares(self):
for row in xrange(0, 8):
for col in xrange(0, 8):
if self._darkQuad(row, col) == True:
self._matrix[row][col].validSquare = False
self._matrix[row][col].symbol = '#'
else:
self._matrix[row][col].validSquare = True
self._matrix[row][col].symbol = '-'
--------
for i in xrange(8):
self._matrix.append( [gameSquare()] * 8 )
-------
def _printDebugBoard(self):
print ''
for row in xrange(0, 8):
for col in xrange(0, 8):
self._matrix[row][col].printSymbol()
print ''
答案 0 :(得分:5)
新发布的代码更新
问题出在以下几行:
self._matrix.append( [gameSquare()] * 8 )
这将在相同对象的每一行上创建8个引用。当您更改其中一个时,它实际上会更改整行。解决它:
self._matrix.append( [gameSquare() for _ in xrange(8)] )
结束更新
您的代码适合我。只需要修理的是:
print _matrix[row][col],
而不是:
print _matrix[row][col]
避免在不同的行上打印每个字符。
我还必须重新排序函数以使代码运行(将_darkQuad
放在顶部)。
答案 1 :(得分:1)
我无法重现此问题。修改您发布的代码以便它运行:
# Moved this function up here so it can be called.
def _darkQuad(row, col):
return row % 2 == col % 2
def _printDebugBoard():
for row in xrange(8):
for col in xrange(8):
print _matrix[row][col],
# Added the comma here ^ so that I don't get unwanted newlines
print ''
_matrix = []
for i in xrange(8):
_matrix.append([' '] * 8)
for row in xrange(8):
for col in xrange(8):
if _darkQuad(row, col):
_matrix[row][col] = '#'
else:
_matrix[row][col] = '-'
_printDebugBoard() # called the _printDebugBoard function
给了我:
# - # - # - # -
- # - # - # - #
# - # - # - # -
- # - # - # - #
# - # - # - # -
- # - # - # - #
# - # - # - # -
- # - # - # - #
(我还进行了两项不会影响结果的更改,但这反映了更好的使用效果。我将if _darkQuad(row, col) == True:
更改为if _darkQuad(row, col):
,如果语句和我更改了{{1} } xrange(0, 8)
,这是典型的用法。)
答案 2 :(得分:0)
您需要做的就是:
print _matrix[row][col],
逗号告诉解释器在print语句后跳过回车符。
答案 3 :(得分:0)
我会选择这样的事情:
matrix = ['#-' * 4, '-#' * 4] * 4
它将数学保持在最低限度。