python 尽管尝试编写2D数组的脚本,但为什么我得到了“对象不可订阅”的提示?

jtjikinw  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(91)

'我对Python很有经验,我非常困惑为什么我得到了一个对象错误,尽管我相当确定我正确地示例化了2D数组。任何见解都非常感谢。
我还想问一下,是否有人知道如何将2D数组中的特定字符替换为另一个字符。

row, col = (10, 10)

playerOneBoard = [[0]*row]*col
playerTwoBoard = [[0]*row]*col
playerOneFound = [["_"]*row]*col
playerTwoFound = [["_"]*row]*col

def placeDestroyer(Player):
    if Player  == 1:
        for a in playerOneBoard:
            print(a)

        print("\nWhat is the x cooridnate of the destroyer?")
        x = int(input(" "))
        print("\nWhat is the y coordnate of the destroyer? (Please use integer values)")
        y = int(input(" "))
        
        x-= 1
        y-= 1
        
        playerOneBoard.insert[x, "D"]
        
        for a in playerOneBoard:
            print(a)

enter image description here
程序的目标是在二维数组的指定点插入字母“D”。

6kkfgxo0

6kkfgxo01#

对于错误,您只有一个打字错误:错误消息告诉您查看第21行。在第21行,它应该是insert(x, "D")而不是insert[x, "D"]
我还想问一下,是否有人知道如何将2D数组中的特定字符替换为另一个字符。
如果我想替换board[row][column]处的当前字符,我会这样做:board[row][column] = 'D'
另外,我注意到您有一个非常常见且隐蔽的错误:
playerOneBoard = [[0]*row]*col不是你想要的。
请尝试以下示例:

playerOneBoard = [[0]*3]*3
print(playerOneBoard)
playerOneBoard[1][1] = 1
print(playerOneBoard)

你会看到你已经改变了2D矩阵的多个地方,这是因为这样做一个2D矩阵不会产生3个不同的行,它只会产生一个由3个相同行组成的矩阵。
您可能会希望改为执行[[0]*row] for _ in range(col)]
参见:List of lists changes reflected across sublists unexpectedly

相关问题