python - 井字游戏的功能
问题描述
我正在使用一个函数来根据用户输入生成井字棋盘:
def write_board(size):
h=[size*[0]]
board=h*size
return board
这个函数在另一个函数中被用来自动生成移动,即它被保存到一个被调用的变量中:
def game(scen,size):
move=1
board=write_board(size)
win=False
res=None
while win==False:
if move%2==1:
coordinates=[(x, y) for x, l in enumerate(board) for y, i in enumerate(l) if i == 0]
if coordinates==[]:
print("Over")
return 0
break
x,y=random.choice(coordinates)
board[x][y]=1
但是,一次移动会勾选多个坐标。例如,如果移动是 (1,4),那么结果是:
[[0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1]]
而不仅仅是:
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
但是,如果板是硬编码的板变量:
board=[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
那么结果是正确的,即对于坐标(1,4):
[0, 0, 0, 0, 0], [0, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
希望这个解释足够清楚。谢谢!
解决方案
推荐阅读
- r - 如何按日期范围分组
- oracle - PL SQL - Lazy Caterer 的序列
- c# - 如何将数据从 PC 发送到手机 c#
- php - 在 laravel PHP AJAX 中仅阻止一个用户的资源并将另一个重定向到只读表单
- c++ - 如何通过 cpp 程序运行 shell 脚本?
- sql-server - Azure Web 应用上用于 SQL Server 的 ODBC 驱动程序
- python - 如何在散点图中设置图表内的标题位置?
- applescript - Applescript一个窗口调整大小,另一个没有
- agda - 在 Cubical 模式下定义非一元函数
- php - How to decode json, group by a column value, and sum values in each group?