You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python判断国际象棋骑士的有效移动?

国际象棋骑士一步移动判断问题

国际象棋骑士的移动规则为:横向移动两格且纵向移动一格,或纵向移动两格且横向移动一格。给定棋盘上两个不同的方格,判断骑士能否从第一个方格一步移动到第二个方格。输入为四个字符:a到h的字母(列号)和1到8的数字(行号),前两个对应第一个方格,后两个对应第二个方格。程序需输出True(若可一步移动)或False(否则)。
示例:

  • 输入:d、4、c、6 → 输出:True(骑士可从d4移动到c6)
  • 输入:d、4、e、2 → 输出:True
  • 输入:f、6、g、5 → 输出:False

核心逻辑分析

骑士的合法一步移动,必须满足以下两种情况之一:

  1. 横向(列)位移的绝对值为2,且纵向(行)位移的绝对值为1
  2. 横向(列)位移的绝对值为1,且纵向(行)位移的绝对值为2

基于此,我们只需要完成三个步骤即可判断:

  • 将列字母转换为对应数值(如a=1、b=2…h=8)
  • 计算两个方格的列、行位移绝对值
  • 验证是否符合上述两种合法移动模式

代码实现(Python)

def knight_move_valid(col1, row1, col2, row2):
    # 列字母转数值:统一为小写后计算,兼容大小写输入
    col_num1 = ord(col1.lower()) - ord('a') + 1
    col_num2 = ord(col2.lower()) - ord('a') + 1
    # 行字符转整数
    row_num1 = int(row1)
    row_num2 = int(row2)
    
    # 计算位移绝对值
    col_diff = abs(col_num1 - col_num2)
    row_diff = abs(row_num1 - row_num2)
    
    # 判断是否符合骑士移动规则
    return (col_diff == 2 and row_diff == 1) or (col_diff == 1 and row_diff == 2)

# 测试示例
print(knight_move_valid('d', '4', 'c', '6'))  # 输出 True
print(knight_move_valid('d', '4', 'e', '2'))  # 输出 True
print(knight_move_valid('f', '6', 'g', '5'))  # 输出 False

代码说明

  • 用ord()函数实现列字母到整数的转换,兼容大小写输入
  • 通过绝对值计算位移,消除移动方向对判断的影响
  • 直接通过逻辑或判断两种合法移动模式,逻辑清晰高效

内容的提问来源于stack exchange,提问作者Albina Hakobyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:40:49