Python: 类 和 for 循环错误
Python: classes and for loop error
我是一名初级程序员。我正在尝试在 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()
Traceback (most recent call last):
File "C:/Users/Goldsmitd/PycharmProjects/CHESS/chees_ver0.02.py", line 22, in
game_board.display_board()
File "C:/Users/Goldsmitd/PycharmProjects/CHESS/chees_ver0.02.py", line 18, in display_board
print (self.board[i][j])
IndexError: string index out of range
为什么会出现此错误?
目前 board_for_start
是一维列表而不是二维列表,并且 print self.board
正在尝试使用两个索引 i、j 访问它。
尝试使用列表理解来初始化游戏板。像这样
board_for_start = [['.' for x in range(8)] for x in range(8)]
此处您正在初始化一个一维列表,但您真正要寻找的是列表列表,这里是无错误代码,请参阅下面提到的 link 以初始化列表列表。另外,如果这看起来很长,你可以学习列表理解。
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()
我对您的代码做了一些小的调整,应该可以帮助您入门。我将你的 class 重命名为稍微不那么通用的东西,尽管我认为你最终会随着游戏的发展而放弃这个 class,因为你会意识到你需要几个离散的对象,而不是一个叫做 "Game" 或 "ChessGame".
为方便起见,所有电路板初始化都发生在 __init__
中,而不是在 class 之外。 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()
示例输出:
In [4]: game = ChessGame()
In [5]: game.board
Out[5]:
[['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.']]
In [6]: game.display_board()
........
........
........
........
........
........
........
........
我是一名初级程序员。我正在尝试在 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()
Traceback (most recent call last): File "C:/Users/Goldsmitd/PycharmProjects/CHESS/chees_ver0.02.py", line 22, in game_board.display_board() File "C:/Users/Goldsmitd/PycharmProjects/CHESS/chees_ver0.02.py", line 18, in display_board print (self.board[i][j]) IndexError: string index out of range
为什么会出现此错误?
目前 board_for_start
是一维列表而不是二维列表,并且 print self.board
正在尝试使用两个索引 i、j 访问它。
尝试使用列表理解来初始化游戏板。像这样
board_for_start = [['.' for x in range(8)] for x in range(8)]
此处您正在初始化一个一维列表,但您真正要寻找的是列表列表,这里是无错误代码,请参阅下面提到的 link 以初始化列表列表。另外,如果这看起来很长,你可以学习列表理解。
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()
我对您的代码做了一些小的调整,应该可以帮助您入门。我将你的 class 重命名为稍微不那么通用的东西,尽管我认为你最终会随着游戏的发展而放弃这个 class,因为你会意识到你需要几个离散的对象,而不是一个叫做 "Game" 或 "ChessGame".
为方便起见,所有电路板初始化都发生在 __init__
中,而不是在 class 之外。 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()
示例输出:
In [4]: game = ChessGame()
In [5]: game.board
Out[5]:
[['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.']]
In [6]: game.display_board()
........
........
........
........
........
........
........
........