我的国际象棋棋盘验证程序有效,但给出的结果不正确

问题描述 投票:1回答:1

程序应根据存储在变量中的任意词典是否满足棋盘标准来打印True或False。标准如下:一个有效的棋盘将只有一位黑人国王和一位白人国王。每个玩家最多只能有16个棋子,最多8个棋子,并且所有棋子必须位于从“ 1a”到“ 8h”的有效空间内;也就是说,一块不能在空间“ 9z”上。作品名称以“ w”或“ b”开头,代表白色或黑色,然后是“典当”,“骑士”,“主教”,“骗子”,“女王”或“国王”。此功能应检测错误何时导致棋盘不正确。

我的程序看起来像这样:

board = {'1h': 'bking', '6c': 'wqueen', '2g': 'bbishop',\
'5h': 'bqueen', '3e': 'wking'}
def isValidChessBoard(_board_):
    gen_num=0
    pawn_num=0
    wking_num=0
    bking_num=0
    letters=['a','b','c','d','e','f','g','h']
    pieces=['pawn','knight','bishop','rook','king','queen']
    for v in _board_.values():
        gen_num+=1
    if gen_num > 16:
        return False
    for v in _board_.values():
        if v.endswith('pawn'):
            pawn_num+=1
    if pawn_num > 8:
        return False
    for v in _board_.values():
        if v =='wking':
            wking_num+=1
        if v =='bking':
            bking_num+=1
    if wking_num!=1 or bking_num!=1:
        return False
    for k in _board_.keys():
        for i in range(1,9):
            if not k.startswith(str(i)):
                return False
    for k in _board_.keys():
        for i in letters:
            if not k.endswith(i):
                return False
    for v in _board_.values():
        if not v.startswith('b') or v.startswith('w'):
            return False
    for v in _board_.values():
        for i in pieces:
            if not v.endswith(i):
                return False
    return True

print(isValidChessBoard(board))

字典似乎符合给定的标准。但是,每次我尝试运行该程序时,它都会打印“ False”。

这里有什么我想念的吗?

非常感谢您,如果这个问题太基础或太宽泛,我深表歉意。

python chess
1个回答
0
投票

如果暂时将所有return False替换为raise Exception,则很容易看到哪个部分返回False。

完成之后,我们可以看到这是问题所在:

for k in _board_.keys():
    for i in range(1,9):
        if not k.startswith(str(i)):
            return False

不确定您要在这里做什么,我想您正在尝试检查件数是否在1到8之间?

© www.soinside.com 2019 - 2024. All rights reserved.