2017-03-07 4 views
0

さて、Pythagorean定理では、最も長い長さになるように斜辺が必要です。私は配列を並べ替えることができました。配列は自動的に値を最小から最大まで並べ替えます。さて、問題は私が値で何をしているのですか?プログラム内のユーザは、最長の長さ(ユーザが座標を入力する)を知らず、コンピュータは3点をグラフ化し、距離の公式を使用して3辺の長さを見る。Pythagorean定理(Python)を解決するための順序付き配列の使用

値をソートできるコードは次のとおりです。

#result3, result2, result are leg measurements 
brandonarray[result3,result2,result] 
brandonarray.sort(key=int) 

したがって、例えば、ユーザのプロット3つのランダムな点は、私は、プログラムがアレイ距離番号を印刷なさ (使用(3,5)、(10,10)、(19,20)をすることができます)場合。

#result3 was 8, result2 was 13, result was 21 
[8,13,21] 

これらの3つの数字を入力すると、動作することがわかります。プログラムでは、これらの脚の測定値によってスカラーとなり、鈍角の三角形になることを伝えました。

しかし、ユーザーがサイドの長さに注意を払わずにポイントを作った場合はどうなりますか?

#all of these are strings b/c in the beginning of program, user has input 
joe=str(float(result3)**int(2)) 
sally=str(float(result2)**int(2)) 

print(str(float(result3)**int(2)),"+",float(result2)**int(2),"=",float(result)**int(2)) 
print("") 
print(str(float(joe)+float(sally)),"=",str(float(result)**int(2))) 

#this code no matter what, will take the number its assigned too, regardless if its bigger than the hypotenuse 
if(str(float(joe)+float(sally))>str(float(result)**int(2))): 
    print("This is an acute triangle!") 
elif(str(float(joe)+float(sally))<str(float(result)**int(2))): 
    print("This is an obtuse triangle!") 
elif(str(float(joe)+float(sally))==str(float(result)**int(2))): 
    print("This is an right triangle!") 

私が本当に求めていることは、私が上で見たように、アレイを使用し、最小値から最大まで、ピタゴラスの定理に実装することができる方法です。助けてくれてありがとう!

+1

あなたのコードにfloat <-> int <->文字列が多すぎます。それらのほとんどを削除する必要があります。 – Elazar

+1

特に、 'int(2)'はノーオペレーションです。 – Elazar

+2

'brandonarray [result3、result2、result]'?あなたは 'brandonarray = [result3、result2、result]'を意味しますか? – Elmex80s

答えて

1

私は、これはあなたの3つの長さは、現在の変数内の番号(int型または浮動小数点数、あるいは文字列)xy、およびzあると仮定すると、より良いアプローチかもしれないと思う。それが

x = float(x) # convert from int or string if necessary 
y = float(y) 
z = float(z) 

x, y, z = sorted([x, y, z]) 
a = x * x + y * y 
b = z * z 
if a < b: 
    print("obtuse") 
elif a > b: 
    print("acute") 
else:    # a == b 
    print("right") 

注意を、浮動小数点演算の不正確さのために、たとえば、25.0!= 25.000000000001のように直角三角形を検出できないことがあります...そのことを回避したい場合は、適切な小さなものにはif abs(a - b) < epsilonのようなものを使用する必要がありますepsilon

最初の3行がないと、すべての計算値が整数(またはlong)になるため、コードはすべての整数値に対して正しく機能するはずです。

+0

[Decimalクラス](https://docs.python.org/3/library/decimal.html)。それを知って、それを愛し、不正確な表現からの不正確さを再び味わうことはありません。 –

+0

@MatthewColeはい、あまりにも、それが本当に必要な場合。質問のサンプルコードと数字を考えてみると、私はそれを持ち出すことに躊躇していました。なぜなら、そのパッケージとしては、少し複雑なものを紹介しているからです。 – twalberg

+0

ありがとうございました! –

関連する問題