簡體   English   中英

Function 覆蓋列表作為參數傳入 - Python

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM