python - 修改在函数内部的函数外部创建的数组
问题描述
我编写了一个井字游戏,在代码的开头,我创建了一个存储 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'
我在这里做错了什么?
解决方案
您必须像其他评论员所建议的那样,通过在函数的开头board
编写来声明一个全局变量,或者将其作为参数传递给函数并就地修改它。global board
playagain
请注意,在后一种情况下,将新列表分配给此变量不会削减它 - 您需要实际修改现有列表:
...
elif again.lower() == "y":
for i in range(len(board)):
board[i] = " "
break
...
推荐阅读
- excel - 如何在具有多个条件的公式中应用引号?
- javascript - 模块/包中的 Javascript 生成器
- python-3.x - Pandas Series.strids 已弃用,pandas groupby 错误
- angular - 在 Angular 6 中实现带有依赖项的 javascript
- c++ - 在 C++ 中为每个可变参数宏参数添加一个函数参数的名称
- android - 如何修复这个 AndroidANR?
- asp.net-core-webapi - 每个操作方法的策略相同但所需参数不同
- javascript - 如果我第二次插入 DIV,它只会重叠,JS 将不再工作
- gradlew - 父项目pitest失败,但如果单独执行子项目运行良好
- android - 带有 Firebase 的 Android 未收到来自 Node.js Firebase 应用程序的通知