如何修复Python实现的国际象棋骑士移动验证函数错误
骑士移动验证函数修复代码及说明
你现有代码存在以下核心问题:
- 入参设计不符合需求:需求要求函数接收2个坐标字符串参数(如
'b1'、'a3'),你当前定义了4个参数,且函数内部直接把入参变量覆盖为字典和集合,完全没有使用输入的坐标数据 - 坐标转数值逻辑错误:你将x2、y2定义为集合,无法实现字符到数字的映射,也没有对输入的坐标字符串做拆分,无法单独获取列对应的字母、行对应的数字
- 差值计算逻辑没有基于实际坐标值,自然无法得到正确结果
修复后的完整代码如下:
def knight_validator(start: str, end: str) -> bool: # 定义列字母到数值的映射,支持大小写输入 col_map = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5, 'F':6, 'G':7, 'H':8} # 拆分起点的列和行,转成可计算的数值 start_col = col_map[start[0].upper()] start_row = int(start[1]) # 拆分终点的列和行,转成可计算的数值 end_col = col_map[end[0].upper()] end_row = int(end[1]) # 计算横纵坐标的绝对差值 dx = abs(start_col - end_col) dy = abs(start_row - end_row) # 骑士走日的规则判断:差值组合为2和1即符合要求 return (dx == 2 and dy == 1) or (dx == 1 and dy == 2) # 测试示例 print(knight_validator('b1', 'a3')) # 输出 True print(knight_validator('b1', 'b3')) # 输出 False
如果需要直接打印结果而非返回布尔值,把return行替换为对应print语句即可。
内容的提问来源于stack exchange,提问作者iBala
相关产品推荐
相关产品推荐

