Python 在函数中存储和编辑列表列表

Python 在函数中存储和编辑列表列表,python,Python,我正在尝试做一个井字游戏。其中一个要求是我需要一个列表,其中0表示未占用空间,1表示已占用空间。我的思维过程是获取用户输入并将其发送到grid_测试函数,以检查是否占用了空间。我遇到了一个问题,当我重新输入函数时,它会将我的列表重置为所有0。有没有一种方法可以让我的列表在每一轮中都保持它的值,或者我应该在函数之外考虑这样做 def grid_test(xcord, ycord): grid_tester = [[0, 0, 0], [0, 0, 0]

我正在尝试做一个井字游戏。其中一个要求是我需要一个列表,其中0表示未占用空间,1表示已占用空间。我的思维过程是获取用户输入并将其发送到grid_测试函数,以检查是否占用了空间。我遇到了一个问题,当我重新输入函数时,它会将我的列表重置为所有0。有没有一种方法可以让我的列表在每一轮中都保持它的值,或者我应该在函数之外考虑这样做

def grid_test(xcord, ycord):
    grid_tester = [[0, 0, 0],
                   [0, 0, 0],
                   [0, 0, 0]]

    print(grid_tester)  #shows the array before anything is changed
    if grid_tester[xcord][ycord] == 1:
        print("Space is already taken.  Please select a different space:")
        print(grid_tester)
        return False
    elif grid_tester[xcord][ycord] == 0:
        grid_tester[xcord][ycord] = 1
        print(grid_tester)  #shows the array after
        return True

def play_game():
    turn = 1
    grid_values = [[" ", " ", " "],
                    [" ", " ", " "],
                    [" ", " ", " "]]
    while turn < 9:
        print("turn = ", turn)  #turn counter.  here just for testing.
        print("X's Turn")

        # ASK user to select a row              FOR X
        xrow = int(input("pick a row (1, 2, 3): "))
        xrow += - 1
        while xrow < 0 or xrow >= 3:
            if xrow not in range(0 - 3):
                print("Invalid option!!!")
                xrow = int(input("pick a row (1, 2, 3): "))
                xrow += - 1

        # ASk user to select a column               FOR X
        xcolumn = int(input("pick a column (1, 2, 3): "))
        xcolumn += - 1
        while xcolumn < 0 or xcolumn >= 3:
            if xcolumn not in range(0 - 3):
                print("Invalid option!!!")
                xcolumn = int(input("pick a column (1, 2, 3): "))
                xcolumn += - 1

        test = grid_test(xrow, xcolumn)
        print(test)

        grid_values[xrow][xcolumn] = "X"
        turn += 1

        print("+---+---+---+")
        print("|", grid_values[0][0], "|", grid_values[0][1], "|", grid_values[0][2], "|")
        print("+---+---+---+")
        print("|", grid_values[1][0], "|", grid_values[1][1], "|", grid_values[1][2], "|")
        print("+---+---+---+")
        print("|", grid_values[2][0], "|", grid_values[2][1], "|", grid_values[2][2], "|")
        print("+---+---+---+")
        print()
def网格测试(xcord、ycord): 网格测试仪=[[0,0,0], [0, 0, 0], [0, 0, 0]] 打印(网格测试器)#在更改任何内容之前显示阵列 如果电网测试仪[xcord][ycord]==1: 打印(“已占用空间。请选择其他空间:”) 打印(网格测试仪) 返回错误 elif网格测试仪[xcord][ycord]==0: 电网测试仪[xcord][ycord]=1 打印(网格测试器)#显示后的阵列 返回真值 def play_game(): 圈数=1 网格_值=[[“”,“”,“”], [" ", " ", " "], [" ", " ", " "]] 当转弯<9时: 打印(“turn=,turn)#旋转计数器。这里只是为了测试。 打印(“轮到X”) #要求用户为X选择一行 xrow=int(输入(“选择一行(1、2、3):”) xrow+=-1 当xrow<0或xrow>=3时: 如果X行不在范围(0-3)内: 打印(“无效选项!!!”) xrow=int(输入(“选择一行(1、2、3):”) xrow+=-1 #要求用户为X选择一列 xcolumn=int(输入(“选择一列(1、2、3):”) xcolumn+=-1 当xcolumn<0或xcolumn>=3时: 如果X列不在范围(0-3)内: 打印(“无效选项!!!”) xcolumn=int(输入(“选择一列(1、2、3):”) xcolumn+=-1 测试=网格测试(X行,X列) 打印(测试) 网格值[xrow][xcolumn]=“X” 转弯+=1 打印(“+--+--+--+--+”) 打印(“|”,网格值[0][0],“|”,网格值[0][1],“|”,网格值[0][2],“|”) 打印(“+--+--+--+--+”) 打印(“|”、网格值[1][0]、“|”、网格值[1][1]、“|”、网格值[1][2]、“|”) 打印(“+--+--+--+--+”) 打印(“|”,网格值[2][0],“|”,网格值[2][1],“|”,网格值[2][2],“|”) 打印(“+--+--+--+--+”) 打印()
这里的问题是每次调用
grid\u test
时,它都会分配
grid\u tester
[[0,0,0],[0,0,0],[0,0,0]]
。我建议将该行移出函数,然后将
grid\u tester
作为参数传递到函数中。

如果希望
grid\u tester
保留其值,则需要在函数外部创建它。每次调用函数时,第一个
grid\u tester=[[0,0,0],…
line将运行并创建一个新的0的2D列表。好的,所以我应该放弃整个函数,只在我的play_game函数中使用代码?我只将2D列表作为另一个参数传入。如果函数需要外部数据,请传入。不,您应该在函数外部创建游戏网格,并将其作为参数传入函数中争论。