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