それだけで行うことが容易である:
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
はあなたのコードを簡素化することができる方法に言及します現代のプログラミング言語。前者は不必要に冗長であり、使用すべきではありません。
私はxまたはyをcと同じにしてから、xまたはy == math.sqrt(x ** 2 + y ** 2)が間違っているかどうかをテストしたことに気づきました。私は自分の投稿を削除する方法を知らない。再び、私は非常に残念です。 – geekkid
あなたの投稿を削除する必要はありません。代わりに投稿を削除してください。そうすれば、あなたは同じ質問をもう一度聞くのではなく、あなたと同じ問題を抱えている人がこの答えを見つけることができます。それは人生の輪です! –