Python:类和for循环错误

时间:2015-08-13 20:04:55

标签: python string loops indexing range

我是初学程序员。我试图用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:字符串索引超出范围

为什么我收到此错误?

4 个答案:

答案 0 :(得分:2)

这里你正在初始化一维列表,但你真正想要的是列表列表,这里是无错误的代码,并看到下面提到的链接,用于初始化列表列表。此外,如果这似乎是一个漫长的过程,您可以学习列表理解。

How to initialize a two-dimensional array in Python?

List comprehension

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)]