用于验证棋王动作的Python代码

时间:2019-09-24 07:31:24

标签: python python-3.x

我是python新手,并肩并肩练习问题。 我在snakify.org上遇到了一个问题,并使用下面的代码解决了。 可以将此代码更简化吗?

问题陈述:

国际象棋王水平,垂直或对角线移动到任何相邻的单元格。给定棋盘上的两个不同单元,确定国王是否可以一步步从第一个单元转到第二个单元。 程序接收从1到8的四个数字的输入,每个数字指定列号和行号,前两个-第一个单元格,然后最后两个-第二个单元格。如果国王可以一步步从第一个单元格移至第二个单元格,则程序应输出YES,否则为否。

我在各种可能的集合上尝试了此解决方案,并且效果很好,但是仍然想知道是否可以减少代码行?

x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
def xcell(x1,x2):
    x=0
    if x1 -x2 > 0:
        x = x1 - x2
    elif  x1-x2 < 0:
        x = x2-x1
    else: x
    return x
def ycell(y1,y2):
    y=0
    if y1 -y2 >= 0:
        y = y1 - y2
    elif  y1-y2 < 0:
        y = y2-y1
    else: y
    return y
if ((xcell(x1,x2) == 1) & (ycell(y1,y2) == 0))or ((xcell(x1,x2) == 0) 
    (ycell(y1,y2) == 1))or((xcell(x1,x2) == 1) & (ycell(y1,y2) == 1)):
     print("YES")
else: print("NO")

如果用户提供输入 4,4,5,4

,则预期输出为 YES

1 个答案:

答案 0 :(得分:4)

您可以使用abs(绝对值)功能来检查移动条件:

x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())

valid_move = abs(x1 - x2) <= 1 and abs(y1 - y2) <= 1 and (x1, y1) != (x2, y2)
print("YES" if valid_move else "NO")