2016-05-10 4 views
-3

私は、三角形の中心を計算するために次のコードを書いています。このコードは、code-golf用のコードです。どんな助けもありがとう。ラムダ関数が浮動小数点を返さない

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] 
+3

あなたは(あなたがいけない)にevalを使用する必要がある場合は、 ['ast.literal_eval'](https://docs.python.org/3/library/ast.html#ast.literal_eval)を使用してください。 –

答えて

0

Pythonが正しい数学をやっていますまあ。あなたのロジックが間違っているか、入力が間違っているか、予想される出力が間違っています。入力が与えられた場合、dの唯一の可能な出力は0または1(2点間のデカルト距離)です。これを行うには、単純に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 

それから、期待される出力が期待される出力である理由を特定していないので、何が間違っているかを理解することはあなた次第です。

+0

>>> d = lambda x、y:((x [0] -y [0])** 2+(x [1] -y [1])** 2インタプリタからの出力を参照してください。 (x、y、z)* x [w] + d(z、x)* y [w] + d(x、y、z) >>> e(0、[1,1]、[2,2])は、(x、y) 、[1,2]) 出力:1.2928932188134525 >>> e(1、[1,1]、[2,2]、[1,2]) 出力:1.7071067811865475 – abybaddi009

+0

その質問に指定されたもの。 – Dunes

+0

ハハハ。あなたが正しいです。だから、私の愚か者。 – abybaddi009

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 

リターン浮動小数点数、例えば:

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

アウト:2.559632791 4.11015248488

関連する問題