我有点困惑。我正在解决这个CodeFights problem,我把它归结为问题是对角线对齐的两个点吗?
坐标是这样的: a1 a2 ......
坐标为“国际象棋符号”:
棋盘的每个方格由唯一的坐标对标识 - 字母和数字。从白色左侧到右侧的垂直方块列标记为“a”到“h”。水平行的正方形从电路板的白色侧面开始编号为1到8。因此,每个方块都有一个唯一的标识,作为由两个字符组成的字符串:第一个是列标签,第二个是行号。
所以我计算了斜率并确定如果所说的斜率 1 那么是,它们是对齐的。我这样说是因为“国际象棋符号”的描述决定了一个方形板,所以对角线斜率总会有1,对吗?但它不适用于三个隐藏的案例(我不能揭示它不起作用的案例)。然后阅读我发现要检查两个点是否对角线对齐,你实际上比较rise == run
但世界上与rise/run == 1
有什么不同?
我只是不知道。
def bishopAndPawn(bishop, pawn):
# Rise is the difference in 'y'
# Run is the differece in 'x'
rise = abs(int(pawn[1]) - int(bishop[1]))
run = abs( string.ascii_lowercase.index(pawn[0]) - string.ascii_lowercase.index(bishop[0]) )
return rise == run
对于return
部分,以下无效:(请记住,在执行此类返回时,必须首先检查run == 0
是否有效,否则您试图划分时会遇到异常
答案 0 :(得分:0)
你在Python2中,你的问题是你正在使用整数除法。
在这种情况下,3/2
为1
而不是1.5
。情况不是3./2
也不是float(3)/2
。
使用ceil
,floor
或round
会生成一个整数,但这不是您想要的;恰恰相反:你希望一个数字接近但不等于1可以与1区分而不是与它对齐:math.ceil(1./2)==math.floor(3./2)==round(2./3)==1