微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python AI中连接4,列表索引必须是整数或切片,而不是NoneType

如何解决在python AI中连接4,列表索引必须是整数或切片,而不是NoneType

嗨,我在大学里用 Python 学习 AI,我的 Connect 4 游戏代码有问题。 我使用了极大极小和 alphaBetaPruning 算法。

我的程序运行,但是当轮到人时,当我想在一个已经有 3 个筹码的列中添加一个筹码时,我收到一个错误:“TypeError:列表索引必须是整数或切片,而不是 nonetype

错误来自我的函数 make_move(在函数的第一行):

def make_move(s,r,c):
    s[0][r][c] = s[2]  # marks the board =>the line of the error
    s[3] -= 1  # one less empty cell
    s[2] = COmpuTER + HUMAN - s[2]  # switches turns
    if winning_move(s,HUMAN):
        s[1] = LOSS
        return
    if winning_move(s,COmpuTER):
        s[1] = VIC
        return
    else:
        # my heuristic
        threesH = check_threes(s,HUMAN) * 1000
        twosH = check_twos(s,HUMAN) * 10
        threesC = check_threes(s,COmpuTER) * 1000
        twosC = check_twos(s,COmpuTER) * 10
        scores = threesH + twosH - threesC - twosC
        s[1] += scores
    if s[3] == 0:
        s[1] = TIE

在 getNext 函数调用 make_move:

def getNext(s): 
    valid_locations = []
    for col in range(COLUMN_COUNT):
        if is_valid_location(s,col):
            tmp = copy.deepcopy(s)
            r=get_next_open_row(s,col)
            make_move(tmp,col)
            valid_locations += [tmp]
    return valid_locations

我想也许函数 get_next_open_row 为 r 返回了错误的值。

def get_next_open_row(s,col):
    for r in range(ROW_COUNT-1,-1):
        if s[0][r][col] == 0:
            return r

游戏状态由 4 个项目的列表表示:

  1. 游戏板 - 整数矩阵(列表列表)。空单元格 = 0,comp 的细胞 = COmpuTER 和人类的细胞 = HUMAN
  2. 状态的启发式值。
  3. 轮到谁了:人类还是计算机
  4. 空单元格数量

感谢您的帮助和时间:-)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。