【发布时间】:2020-10-03 08:27:33
【问题描述】:
程序应该根据存储在变量中的任意字典是否满足棋盘标准来打印 True 或 False。标准如下: 一个有效的棋盘只有一个黑王和一个白王。每个玩家最多只能有16个棋子,最多8个棋子,并且所有棋子必须在'1a'到'8h'的有效空间上;也就是说,一块不能在空间“9z”上。棋子名称以“w”或“b”开头,表示白色或黑色,然后是“pawn”、“knight”、“bishop”、“rook”、“queen”或“king”。当错误导致棋盘不正确时,此函数应进行检测。
我的程序如下所示:
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”。
这里有什么我遗漏的吗?
非常感谢您,如果问题太基本或太宽泛,我深表歉意。
【问题讨论】: