【问题标题】:Python list not being passed by valuePython列表没有按值传递
【发布时间】:2021-10-09 16:37:10
【问题描述】:

我正在尝试创建一个井字游戏 AI,其中一个想法是计算给定位置的所有可能的未来棋盘状态,以获得统计上的最佳移动。我认为使用递归将是计算这一点的最佳方法,但即使在检查所有获胜位置之前,我也遇到了这个问题,尽管在函数中传递了一个新对象,但棋盘会发生变化。

import sys

def calc(board : list, turn : bool):
    game_over = True
    letter = "o" if turn else "x"

    for i in range(len(board)):
        for j in range(len(board)):
            if board[i][j] == "":
                t = list(board)
                t[i][j] = letter
                game_over = False
                calc(list(t), not turn)
    
    if game_over:
        print(board)

def main():
    sys.setrecursionlimit(50000)
    board = [["", "", ""],["", "", ""],["", "", ""]]
    calc(board, True)

if __name__ == '__main__':
    main()

如何让棋盘保持不变,以便评估所有可能的移动?

【问题讨论】:

  • 使用 board.copy() ?
  • @RaniSharim 做同样的事情???试过了,还是不行。
  • list(t) 只是创建一个副本。要么创建深拷贝,要么使用浅板。

标签: python list


【解决方案1】:

该代码代表所有可能处于最终状态的游戏:

代码:

import itertools
player = ['O', 'X']
itertools.product(player, repeat = 9)

list comprehension:

[[i[0:3],i[3:6],i[6:10]] for i in itertools.product(player, repeat = 9)]

更多信息:

Generate a list of all unique Tic Tac Toe boards


我建议在那里MiniMax Algorithm

【讨论】:

  • 问题中的代码只生成完全填充的板。那只是 512 种组合。
  • 代码是问题 - 只生成这个 -> [['o', 'x', 'o'], ['x', 'o', 'x'], ['o' , 'x', 'o']]
猜你喜欢
  • 1970-01-01
  • 2011-01-20
  • 2012-11-28
  • 2019-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多