[英]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.