[英]Function overwriting list passed in as argument - Python
我正在编写一个程序来玩井字游戏(我正在学习 python)。 我有一个 function 传入一个名为 movelist 的 10 项列表,然后检查是否有任何玩家,无论是 Xs 还是 Os 赢得了比赛。 如果其中一个获胜,则返回“X”或“O”,如果没有人获胜,则返回 False。 wins 是所有可能获胜组合的列表。 但是 function 正在覆盖移动列表,我不知道为什么。 我将 movelist 分配给测试,然后迭代并更改测试,所以我不明白 movelist 在哪里/为什么被更改。 传入的典型移动列表是 ['#','X','X','X',4,'O',6,7,'O',9]。 function 根本不应该更改列表“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 中列出 function 的方式的一部分。同样的问题也可能出现在具有.copy()
方法的字典中。 希望有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.