有没有办法重置 python 中列表的值?

Is there a way to reset the values of a list in python?

我正在开发一款井字游戏,该游戏的功能是将列表中的连字符替换为 X 和 O 以形成网格。我也是 python 的初学者,所以这段代码会很笨重。问题是我希望游戏可以重新玩,但我找不到将列表重置为开始时使用的连字符的方法。下面是一段简化的代码,可以更好地说明问题:

list = ["-","-","-", "X","O"]

def replace():
    list[0] = list[3]

def main():
    replace()
    play_again = input ("play again?")
    if play_again == "yes":
        main()
    else:
        exit()
    
main()

这使得列表从 ["-","-","-", "X","O"] 变为 ["X","-","-", "X","O"],从而使游戏正常运行。

我希望能够做的是在玩家再次玩游戏时以某种方式将 list 变回 ["-","-","-", "X","O"]。不幸的是,该列表似乎停留在 ["X","-","-", "X","O"] 处。我试过:

  1. replace()

    正上方添加 list = ["-","-","-", "X","O"]
  2. replace()

    正上方添加 list[0] = "-"

而且这些选项都不起作用。

是否可以将 list 的值重置为我开始时的值?如果是这样,我应该如何处理?

使您的代码“有效”的最简单更改是:

def main():
    global list
    list = ["-","-","-", "X","O"]
    replace()
    play_again = input ("play again?")
    if play_again == "yes":
        main()
    else:
        exit()

(虽然这不是我从头开始做的方式——但你已经指出笨重的代码是 okay/expected,所以我不打算在这里尝试修复它。)

这也可以,不需要 global 声明:

def main():
    list[:] = ["-","-","-", "X","O"]
    replace()
    play_again = input ("play again?")
    if play_again == "yes":
        main()
    else:
        exit()