Lambda函数不返回float

时间:2016-05-10 10:13:23

标签: python python-3.x lambda

我编写了以下用于计算三角形中心的代码。这段代码应该用于代码高尔夫。任何帮助将不胜感激。

d = lambda x,y: ((x[0]-y[0])**2+(x[1]-y[1])**2)**0.5
e = lambda w,x,y,z: float(d(y,z)*x[w]+d(z,x)*y[w]+d(x,y)*z[w])/(d(x,y)+d(y,z)+d(z,x))
a,b,c=eval(input())
px,py=e(0,a,b,c),e(1,a,b,c)
print('[%f,%f]' % (px,py))

输入:

([1,2],[2,2],[1,2])

预期产出:

[1.2928932188134525, 1.7071067811865475]

实际输出:

[1.000000,2.000000]

2 个答案:

答案 0 :(得分:0)

Python正确地进行数学运算。您的逻辑错误或输入错误或您的预期输出错误。根据您的输入,d唯一可能的输出是01(两点之间的笛卡尔距离)。这样做,我们可以简单地e查看它可能为第一个函数调用输出的内容。

假设:

w = 0
x = [1, 2]
y = [2, 2]
z = [1, 2]
result = float(d(y,z)*x[w]+d(z,x)*y[w]+d(x,y)*z[w])/(d(x,y)+d(y,z)+d(z,x))

变为:

result = float(d([2, 2],[1, 2])*[1, 2][0]+d([1, 2],[1, 2])*[2, 2][0]+d([1, 2],[2, 2])*[1, 2][0])/(d([1, 2],[2, 2])+d([2, 2],[1, 2])+d([1, 2],[1, 2]))

变为:

result = float((1.*1 + 0.*2 + 1.*1) / (1. + 1. + 0))

变为:

result = float(2. / 2.)
result = float(1.)
result = 1. # not 1.2928932188134525

在那之后,由你没有明确为什么预期的输出是预期的输出,由你决定出了什么问题。

答案 1 :(得分:0)

您确定[1.000000,2.000000]不是正确答案吗?这段代码:

d = lambda x,y: round(((x[0]-y[0])**2.0+(x[1]-y[1])**2.0)**0.5, 12)
e = lambda w,x,y,z: float(round((d(y,z)*x[w]+d(z,x)*y[w]+d(x,y)*z[w])/(d(x,y)+d(y,z)+d(z,x)),12))
a,b,c= input()
px,py=e(0,a,b,c),e(1,a,b,c)
print px, py

返回浮动数字,例如:

in: ([1.25325,2.34346], [2.25325,4.34346], [22.25325,22.34346])

out: 2.559632791 4.11015248488