我是初学程序员。我试图用Python制作面向对象的国际象棋游戏。这是我的第一步,布置棋盘。我写了:
#this is board whick is necessery to run a class
board_for_start=[]
for x in range(8):
for y in range(8):
board_for_start.append('.')
class game:
#this is a setting board in class
def __init__(self,board):
self.board=board
# displaying board
def display_board(self):
for i in range (8):
for j in range (8):
print (self.board[i][j])
game_board=game(board_for_start)
game_board.display_board()
追踪(最近一次通话): File" C:/Users/Goldsmitd/PycharmProjects/CHESS/chees_ver0.02.py" ;,第22行,在 game_board.display_board() 文件" C:/Users/Goldsmitd/PycharmProjects/CHESS/chees_ver0.02.py",第18行,在display_board中 打印(self.board [i] [j]) IndexError:字符串索引超出范围
为什么我收到此错误?
答案 0 :(得分:2)
这里你正在初始化一维列表,但你真正想要的是列表列表,这里是无错误的代码,并看到下面提到的链接,用于初始化列表列表。此外,如果这似乎是一个漫长的过程,您可以学习列表理解。
How to initialize a two-dimensional array in Python?
class Chess:
def __init__ (self):
self.board = self.create_board ()
def create_board (self):
board_x = []
for x in range (8):
board_y = []
for y in range (8):
board_y.append ('.')
board_x.append (board_y)
return board_x
def display_board (self):
for i in range (8):
for j in range (8):
print (self.board[i][j], end="")
print()
game = Chess()
game.display_board()
答案 1 :(得分:1)
我对您的代码进行了一些小调整,以帮助您入门。我将你的课程重命名为稍微不那么通用的东西,不过我认为随着游戏的增长,你最终会丢弃这个课程,因为你会发现你需要几个离散的对象,而不是一个叫做“Game”或“ChessGame”的大事。
为方便起见,所有电路板初始化都在for (var i = 0; i < order.Items.length; i++) {
formatedOrder['Subtotal'] += parseInt(order.Items[i].Quantity) * parseFloat(order.Items[i].UnitPrice);
console.log(order.Items[i]);
console.log(order.Items[i].Sku);
console.log(order.Items[i]['Sku']);
formatedOrder["OrderLines"].push({
"Product": order.Items[i].Sku,
"Quantity": parseInt(order.Items[i].Quantity),
"Price": parseFloat(order.Items[i].UnitPrice)
});
}
进行,而不是在课外。 __init__
函数已被重写,以防止在我的评论中讨论过一个错误。
display_board
示例输出:
class ChessGame:
def __init__(self):
self.board = [list('........') for i in range(8)]
def display_board(self):
for row in self.board:
for square in row:
print(square, end="")
print()
答案 2 :(得分:0)
目前board_for_start
是一维列表而不是二维列表,而print self.board
正试图使用两个索引i,j来访问它。
答案 3 :(得分:0)
尝试使用列表理解来初始化游戏板。像这样的东西
board_for_start = [['.' for x in range(8)] for x in range(8)]