【问题标题】:Lambda function doesn't return floatLambda 函数不返回浮点数
【发布时间】:2016-05-10 10:13:22
【问题描述】:

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

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]

【问题讨论】:

标签: python python-3.x lambda


【解决方案1】:

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

之后,由您自己找出问题所在,因为您没有指定为什么预期的输出是预期的输出。

【讨论】:

  • 查看解释器的输出:>>> 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)) >>> e(0,[1,1],[2, 2],[1,2]) 输出:1.2928932188134525 >>> e(1,[1,1],[2,2],[1,2]) 输出:1.7071067811865475
  • 您使用的输入与问题中指定的输入不同。
【解决方案2】:

您确定 [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

返回浮点数,例如:

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

输出: 2.559632791 4.11015248488

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 2019-10-10
    • 2018-11-30
    • 1970-01-01
    • 2018-03-02
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多