列表索引超出范围 ConnectFour
Posted
技术标签:
【中文标题】列表索引超出范围 ConnectFour【英文标题】:List index out of range ConnectFour 【发布时间】:2017-01-02 23:47:15 【问题描述】:这个错误来了。我不知道那是什么。我是初级程序员。
ConnectFourBoard.py",第 58 行,在 show_board_dynamic 中 print(self.__board[i][j], end = ""), IndexError: list index out of range
我的代码:
class ConnectFourBoard:
def __init__(self, cols = 7, rows = 6, requiredToWin = 4):
global __board
self.__space = ''
self.__board = []
self.cols = cols
self.rows = rows
self.Win = requiredToWin
self.__board = [[''] * rows for i in range(cols)]
for i in range(cols):
row = ['']*cols
self.__board.append(row)
def MakeMove(self, row, col, element):
global __board
self.__board[row][col] = element
def CheckForWin(self):
return winner
def CheckHz():
for x in range (6):
for y in range (7):
row += board[x][y]
print("%s" %row)
row = ""
if "XXXX" in row:
print("Winner is X")
break;
def CheckVt():
for y in range(7):
for x in range(6):
column += board[y][x]
print("%s" %column)
column = ""
if "XXXX" in column:
print ("Winner is X")
break;
def FullBoard(self):
return True
def FreeSpace(self, row, col):
return True
def show_board_dynamic(self):
print()
print("-------")
for i in range(len(self.__board)):
for j in range(len(self.__board)):
print("|", end = "")
print(self.__board[i][j], end = ""),
print("|")
print("-------")
print()
【问题讨论】:
查看pythontutor.com 尝试从您的__init__()
中删除这个for i in range(cols): row = ['']*cols self.__board.append(row)
,即它的最后几行。
【参考方案1】:
您有不同的行数和列数,但会在 len(self.__board)
上对它们进行迭代。
变化:
for i in range(len(self.__board)):
for j in range(len(self.__board)):
print("|", end = "")
print(self.__board[i][j], end = ""),
print("|")
print("-------")
到:
for col in self.__board:
for val in col:
print("|", end = "")
print(val, end = ""),
print("|")
print("-------")
【讨论】:
它有效,谢谢!!!但是当我只需要 6 行时,我的行数太多了,你知道为什么吗?【参考方案2】:你应该
-
将板更改为正方形,使 rows=cols。
分别删除 6 和 7 行和列的默认参数。
6 行 7 列的硬编码
有很多方法可以解决在整个程序中行和列不同步的错误。
for i in range(len(self.__board)):
for j in range(len(self.__board[0])):
这条线应该是固定的。
【讨论】:
这会解决我运行时打印太多行的问题吗? def show_board_dynamic(self): print() print("-------") for col in self.__board: for val in col: print("|", end = " ") print(val, end = ""), print("|") print("------") 我已经把那一行改成了这样,所以我不知道下一步该怎么做 请参阅我的回答以了解三种可能的解决方案。它仍然抛出错误吗?您在上面发布的评论将不起作用。它将遍历元素。相反,您想遍历索引并通过板打印索引中的值。 只需将第二个 for 循环替换为“for j in range(len(self.__board[0])):”以上是关于列表索引超出范围 ConnectFour的主要内容,如果未能解决你的问题,请参考以下文章
IndexError:列表索引超出范围 - python 错误