程序应根据存储在变量中的任意词典是否满足棋盘标准来打印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”。
这里有什么我想念的吗?
非常感谢您,如果这个问题太基础或太宽泛,我深表歉意。
如果暂时将所有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之间?