作为参数传入的函数覆盖列表 - Python
Function overwriting list passed in as argument - Python
我正在编写一个程序来玩井字游戏(我正在学习 python)。我有一个函数,它获取一个名为 movelist 的 10 项列表,然后检查是否有任何玩家,Xs 或 Os 赢得了比赛。如果其中之一有,则 returns 'X' 或 'O',如果没有人赢得它 returns 错误。 wins 是所有可能获胜组合的列表。但是该函数正在覆盖移动列表,我不明白为什么。我将 movelist 分配给测试,然后遍历并更改测试,所以我不明白 where/why movelist 已更改。传入的典型移动列表为 ['#','X','X','X',4,'O',6,7,'O',9 ].该函数根本不应该更改列表 'movelist',因为它会覆盖之前的移动并使游戏无法玩。
请看下面的代码:
def gamewon(movelist):
#WINNING COMBINATIONS
wins = [['N','Y','Y','Y','N','N','N','N','N','N'],['N','N','N','N','Y','Y','Y','N','N','N'],
['N','N','N','N','N','N','N','Y','Y','Y'],['N','Y','N','N','Y','N','N','Y','N','N'],
['N','N','Y','N','N','Y','N','N','Y','N'],['N','N','N','Y','N','N','Y','N','N','Y'],
['N','Y','N','N','N','Y','N','N','N','Y'],['N','N','N','Y','N','Y','N','Y','N','N']]
test = movelist
index = 0
for item in test:
if item == 'X':
test[index] = 'Y'
index += 1
else:
test[index] = 'N'
index += 1
if test in wins:
return 'X'
test = movelist
index = 0
for item in test:
if item == 'O':
test[index] = 'Y'
index += 1
else:
test[index] = 'N'
index += 1
if test in wins:
return 'O'
return False
我认为您遇到的问题是您应该使用 test = movelist.copy()
而不是 test = movelist
。这是 python 中的一个常见问题,也是 python 中列表功能的一部分。 3. 字典也会出现同样的问题,它也有 .copy()
方法。希望对您有所帮助。
我正在编写一个程序来玩井字游戏(我正在学习 python)。我有一个函数,它获取一个名为 movelist 的 10 项列表,然后检查是否有任何玩家,Xs 或 Os 赢得了比赛。如果其中之一有,则 returns 'X' 或 'O',如果没有人赢得它 returns 错误。 wins 是所有可能获胜组合的列表。但是该函数正在覆盖移动列表,我不明白为什么。我将 movelist 分配给测试,然后遍历并更改测试,所以我不明白 where/why movelist 已更改。传入的典型移动列表为 ['#','X','X','X',4,'O',6,7,'O',9 ].该函数根本不应该更改列表 'movelist',因为它会覆盖之前的移动并使游戏无法玩。 请看下面的代码:
def gamewon(movelist):
#WINNING COMBINATIONS
wins = [['N','Y','Y','Y','N','N','N','N','N','N'],['N','N','N','N','Y','Y','Y','N','N','N'],
['N','N','N','N','N','N','N','Y','Y','Y'],['N','Y','N','N','Y','N','N','Y','N','N'],
['N','N','Y','N','N','Y','N','N','Y','N'],['N','N','N','Y','N','N','Y','N','N','Y'],
['N','Y','N','N','N','Y','N','N','N','Y'],['N','N','N','Y','N','Y','N','Y','N','N']]
test = movelist
index = 0
for item in test:
if item == 'X':
test[index] = 'Y'
index += 1
else:
test[index] = 'N'
index += 1
if test in wins:
return 'X'
test = movelist
index = 0
for item in test:
if item == 'O':
test[index] = 'Y'
index += 1
else:
test[index] = 'N'
index += 1
if test in wins:
return 'O'
return False
我认为您遇到的问题是您应该使用 test = movelist.copy()
而不是 test = movelist
。这是 python 中的一个常见问题,也是 python 中列表功能的一部分。 3. 字典也会出现同样的问题,它也有 .copy()
方法。希望对您有所帮助。