首页 > 解决方案 > 有没有办法在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. list = ["-","-","-", "X","O"]在上面添加replace()

  2. list[0] = "-"在上面添加replace()

这些选项都不起作用。

是否可以将 的值重置为list我一开始的值?如果是这样,我应该如何解决这个问题?

标签: pythonlistreset

解决方案


使您的代码“工作”的最简单的更改是:

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

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

这也将起作用,并且不需要global声明:

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

推荐阅读