2012-04-01 7 views
2

python条件文としての三角不等式の論理?

[コミュニティ編集元のタイトルは、「Pythonの条件文」だった、OPは以下のコードが間違っているものを求めている]私は、三辺が理論的に三角形を形成することができるかどうかを決定することになっています機能を作りました。私の意見ではうまくいきますが、pyschools.comのウェブサイトにコードを入力すると、いくつかのテストケースでは動作しません(残念ながら、動作しなかったケースは表示されません)。私のコードから何かが欠けているので、いくつかの特殊なケースでは私のロジックが壊れていますか?ご助力ありがとうございます。ここ 機能です:

import math 
def isTriangle(x, y, z): 
    if x > 0 and y > 0 and z > 0: 
     if x > y and x > z: 
      c = x 
     elif y > x and y > z: 
      c = y 
     else: 
      c = z 
     if c == math.sqrt(x**2 + y**2): 
      return True 
     else: 
      return False 
    else: 
     return False 
+0

私はxまたはyをcと同じにしてから、xまたはy == math.sqrt(x ** 2 + y ** 2)が間違っているかどうかをテストしたことに気づきました。私は自分の投稿を削除する方法を知らない。再び、私は非常に残念です。 – geekkid

+4

あなたの投稿を削除する必要はありません。代わりに投稿を削除してください。そうすれば、あなたは同じ質問をもう一度聞くのではなく、あなたと同じ問題を抱えている人がこの答えを見つけることができます。それは人生の輪です! –

答えて

8

それだけで行うことが容易である:

def isTriangle(sides): 
    smallest,medium,biggest = sorted(sides) 
    return smallest+medium>=biggest and all(s>0 for s in sides) 

(編集:私は2,2,4は技術的に三角形であると言うことにしましたが、縮退三角形を、>>=を変更しますあなたがそれを三角形とはみなさないならば)。

これはまさにあなたがやっていることです。 c = largest = max(x,y,z)が正しく計算されていますが、直角三角形かどうかを確認するreturn math.sqrt(x**2+y**2)を実行しています。

デモ:

import math    # from math import * for such common functions 
def isTriangle(x, y, z): # better to pass in a tuple or object, but this works 
    if x>0 and y>0 and z>0: # (then you could do all(s>0 for s in sides)) 
          # (you could also do isTriangle(*sides)) 
          # (you might need to add checks len(sides)==3 
          # if your input data might include e.g. squares) 
     if x > y and x > z: # \ 
      c = x    # | 
     elif y > x and y > z: # > This is the same as c = max(x,y,z) 
      c = y    # | 
     else:     # | 
      c = z    #/
     if c == math.sqrt(x**2 + y**2): # \ 
      return True     # | Same as return c==sqrt(x**2+y**2) 
     else:       # | 
      return False    #/ 
    else: 
     return False 

「Falseを返す他に真のブールリターンがあれば、」任意のほとんどに「戻りブール値」と同じである:I以下

>>> isTriangle([2,2,6]) 
False 
>>> isTriangle((5,5,9)) 
True 
>>> isTriangle([-1,2,2]) 
False 

はあなたのコードを簡素化することができる方法に言及します現代のプログラミング言語。前者は不必要に冗長であり、使用すべきではありません。