2
board = [["bRook", "bKnight", "bBishop", "bQueen", "bKing", "bBishop", "bKnight", "bRook"],
         ["bPawn", "bPawn",   "bPawn",   "bPawn",  "bPawn", "bPawn",   "bPawn",   "bPawn"],
         ["",      "",        "",        "",       "",      "",        "",        ""],
         ["",      "",        "",        "",       "",      "",        "",        ""],
         ["",      "",        "",        "",       "",      "",        "",        ""],
         ["",      "",        "",        "",       "",      "",        "",        ""],
         ["wPawn", "wPawn",   "wPawn",   "wPawn",  "wPawn", "wPawn",   "wPawn",   "wPawn"],
         ["wRook", "wKnight", "wBishop", "wQueen", "wKing", "wBishop", "wKnight", "wRook"]]


def evaluation():
#Material Score
materialScoreWhite = 0
materialScoreBlack = 0
#Main Material
pieceScores = {"Pawn": 100,
               "Knight": 320,
               "Bishop": 330,
               "Rook": 500,
               "Queen": 900,
               "King": 20000}

    for each in board:
        for f in each:
            if f[0] == "w":
                materialScoreWhite += "w" + pieceScores[each[0:]]
            elif f[0] == "b":
                materialScoreBlack += "b" + pieceScores[each[0:]]

我正在尝试用 Python 制作一个简单的国际象棋引擎。该列表board显示了董事会如何处于程序试图评估的位置。我的部分评估涉及检查板上的每一块,并为该颜色的分数添加一定的值。

例如,此刻列表中的第一个部分(起始位置)是一辆黑车,所以我希望程序添加500materialScoreBlack. 但是,我不断收到此错误:

    materialScoreBlack += "b" + pieceScores[each[0:]]
TypeError: unhashable type: 'list'

我怎样才能解决这个问题?

4

2 回答 2

1

您正在尝试使用 访问pieceScores each[0:],它是每个数组的“切片”,它只是一个较短的列表。您无法访问列表中的字典!我认为你的意思是

materialScoreBlack += pieceScores[f[1:]]

哪个正确访问字典。另请注意,我将从 0 开始的切片更改为从 1 开始的切片。这是为了删除板中条目开头的 w/b,以便可以访问字典。我没成功

materialScoreBlack += "b" + pieceScores[f[1:]]

因为我不确定你想用“b”做什么——materialScoreBlack 看起来和听起来应该是一个数字,所以即使 Python 允许你这样做,也不要尝试向它添加字符串。

于 2015-06-16T12:41:49.833 回答
0

不知道你想用这条线做什么

materialScoreWhite += "w" + pieceScores[each[0:]]

添加“w”或“b”对我来说似乎没有意义,而且你不能像这样访问你的字典。刚刚尝试了代码,从 f 中的第二个元素开始,它工作正常

def evaluation():

materialScoreWhite = 0
materialScoreBlack = 0
#Main Material
pieceScores = {"Pawn": 100,
               "Knight": 320,
               "Bishop": 330,
               "Rook": 500,
               "Queen": 900,
               "King": 20000}

for each in board:
    for f in each:
        if len(f) > 0:
            if f[0] == "w":
                materialScoreWhite += pieceScores[f[1:]]
            elif f[0] == "b":
                materialScoreBlack += pieceScores[f[1:]]

print materialScoreBlack
print materialScoreWhite
于 2015-06-16T12:47:26.223 回答