我是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答案 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")