繁体   English   中英

我正在尝试用Python制作四连冠游戏。 这是我印刷电路板的代码。 运行结果导致列表索引超出范围错误

[英]I'm trying to make a connect four game in Python. This is my code for printing the board. Running results in a list index out of range error

到目前为止,这是我的代码:

grid = [["0","1","2","3","4","5","6"],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.']]
itemNumber = 0
for listItem in range(len(grid)):
    line = ""
    elementNumber = 0
    for element in range(listItem):
        elementNumber = elementNumber + 1
        elementNumber = int(elementNumber)
        listItem = grid[[itemNumber][elementNumber]]
        line = line + str(listItem)
    print(line)
    itemNumber = itemNumber + 1

运行代码会在第20行给出列表索引超出范围的错误。我不明白为什么会这样。

另外,有人可以帮助我找到一种方法来检查对角线是否有赢吗? 如果有人输入不存在的列,我还需要保持代码运行的帮助。

任何帮助将不胜感激,并在此先感谢任何贡献者。

我认为您的问题是您正在尝试访问数组

listItem = grid[[itemNumber][elementNumber]]

代替

listItem = grid[itemNumber][elementNumber]

也许您想在元素号“之后”添加+1,因为您将永远不会获得像这样的第一列,所以您已经访问了该值

遍历网格的正确方法是:

itemNumber = 0
for x in range(len(grid)):
    line = ""
    elementNumber = 0
    for element in range(len(grid[itemNumber])):
        listItem = grid[itemNumber][elementNumber]
        elementNumber = elementNumber + 1
        line = line + str(listItem)
    print(line)
    itemNumber = itemNumber + 1

这是我认为您做错了的地方:

listItem = grid[[itemNumber][elementNumber]]

索引列表列表的正确方法是list[x][y] ,因此在您的情况下应为listItem = grid[itemNumber][elementNumber]

这是您的代码中的另一个问题:

while "OOOO" or "XXXX" in grid == False:
if gridSeven[column] == "X" or "O":

这些是错误的条件格式。 "OOOO"是一个非空字符串,已经表示True,因此,此while循环条件始终为True。 同样, "O"表示真。 正确的格式应如下所示:

while "OOOO" not in grid and "XXXX" not in grid:
if gridSeven[column] in ["X","O"]:

让我们分解一下索引网格的尝试,

listItem = grid[[itemNumber][elementNumber]]

我们首先打印变量的值; itemNumberitemNumberelementNumber均为1。 那使这个表达

listItem = grid[[1][1]]

为了评估表达式grid[1][1]], we start with the index you gave, [1] [1]开始; note the extra barckets. Working from the inside out, ; note the extra barckets. Working from the inside out, ; note the extra barckets. Working from the inside out, [1] (the left-hand one) is a list with a single element, the integer 1 (the left-hand one) is a list with a single element, the integer . You now try to access an element of this list, element . You now try to access an element of this list, element 1 . However, since [1] is a list with only one element, its only valid index is . However, since [1] is a list with only one element, its only valid index is 0`。

这是您的错误出现的地方。 正确的分配是

listItem = grid[itemNumber][elementNumber]

这将评估grid[1][1] ,它是7x7网格的第2行,第2列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM