在证明两个点在同一对角线上时,round(上升/下降)== 1不起作用但是上升==运行确实

时间:2017-10-01 21:23:15

标签: python

我有点困惑。我正在解决这个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是否有效,否则您试图划分时会遇到异常

  • 上升/下跑== 1
  • math.ceil(float(rise)/ run)== 1
  • math.floor(float(rise)/ run)== 1
  • round(float(rise)/ run)== 1

1 个答案:

答案 0 :(得分:0)

你在Python2中,你的问题是你正在使用整数除法。 在这种情况下,3/21而不是1.5。情况不是3./2也不是float(3)/2

使用ceilfloorround会生成一个整数,但这不是您想要的;恰恰相反:你希望一个数字接近但不等于1可以与1区分而不是与它对齐:math.ceil(1./2)==math.floor(3./2)==round(2./3)==1