首页 > 解决方案 > 修改在函数内部的函数外部创建的数组

问题描述

我编写了一个井字游戏,在代码的开头,我创建了一个存储 X 和 O 的列表。所以它不在任何函数内部。列表的代码如下:board = [" " for x in range(10)]我还写了这个,以便在游戏结束后能够再次玩:

def playagain():
    while True:
        again = input()
        if again.lower() == "n":
            print("Goodbye!")
            quit()
        elif again.lower() == "y":
            board = [" " for x in range(10)]
            break
        else:
            print("Please enter Y or N")

while True:
    main()
    print("Again? \'Y\' or \'N\'")
    playagain()

但是如果我在它询问我是否想再玩一次时输入“y”,它只会打印出最后一个结果并询问我是否想再玩一次,即使它应该在我输入“y”时重新创建棋盘列表并重新开始游戏”。这是它给我的输出:

Computer placed an 'O' in position  5 :
   |   |
 X | X | O
   |   |
-----------
   |   |
 X | O |
   |   |
-----------
   |   |
 O |   |
   |   |
Sorry, O's won this time
Again? 'Y' or 'N'
y
Welcome to Tic Tac Toe!
   |   |
 X | X | O
   |   |
-----------
   |   |
 X | O |
   |   |
-----------
   |   |
 O |   |
   |   |
Sorry, O's won this time
Again? 'Y' or 'N'

我在这里做错了什么?

标签: python

解决方案


您必须像其他评论员所建议的那样,通过在函数的开头board编写来声明一个全局变量,或者将其作为参数传递给函数并就地修改它。global boardplayagain

请注意,在后一种情况下,将新列表分配给此变量不会削减它 - 您需要实际修改现有列表:

...
        elif again.lower() == "y":
            for i in range(len(board)):
                board[i] = " "
            break
...

推荐阅读