print("Finding the type of triangle.")
print()
print("Note: Side C should be the longest side")
print()
side1 = float(input("Enter the length of side A: "))
print()
side2 = float(input("Enter the length of side B: "))
print()
side3 = float(input("Enter the length of side C: "))
print()
if (side1 > side2 and side1 > side3): ##validating triangle check for side A
if (side1 >= side2+side3):
print ("Invalid input, not a triangle. \nSide A must be smaller then the sum of Side B + Side C.")
print()
if (side2 > side1 and side2 > side3): ##validating triangle check for side B
if (side2 >= side1+side3):
print ("Invalid input, not a triangle. \nSide B must be smaller then the sum of Side A + Side C.")
print()
if (side3 > side1 and side3 > side2): ##validating triangle check for side C
if (side3 >= side1+side2):
print ("Invalid input, not a triangle. \nSide C must be smaller then the sum of Side A + Side B.")
print()
if (side1 != side2 and side1 != side3): ##scalene triangle check
if (side1**2 + side2**2 > side3**2):
print ("It is a Acute Scalene triangle.")
if (side1**2 + side2**2 == side3**2):
print ("It is a Right Scalene triangle.")
if (side1**2 + side2**2 < side3**2):
print ("It is a Obtuse Scalene trianle.")
if (side1 == side2 or side1 == side3): ##isosceles triangle check 1
if (side1**2 + side2**2 > side3**2):
print ("It is a Acute Isosceles triangle.")
if (side1**2 + side2**2 == side3**2):
print ("It is a Right Isosceles triangle.")
if (side1**2 + side2**2 < side3**2):
print ("It is a Obtuse Isosceles trianle.")
if (side2 == side1 or side2 == side3): ##isosceles triangle check 2
if (side1**2 + side2**2 > side3**2):
print ("It is a Acute Isosceles triangle.")
if (side1**2 + side2**2 == side3**2):
print ("It is a Right Isosceles triangle.")
if (side1**2 + side2**2 < side3**2):
print ("It is a Obtuse Isosceles trianle.")
if (side1 == side2 and side1 == side3): ##equilateral triangle check
print ("It is a Equilateral triangle.")
这是一个简单的程序,应该从用户输入三面,计算角度,然后确定它是什么类型的三角形,然后将相应的声明打印回用户。但是,如果用户输入3,5,7或5,7,9则没有任何打印声明。但公式都是正确的。
答案 0 :(得分:2)
如果不考虑公式的正确性,您可以根据输入轻松测试每个if
语句。
对于side1 = 3
,side2 = 5
和sid3 = 7
,您可以看到:
side1 > side2 and side1 > side3
是假的side2 > side1 and side2 > side3
是假的side3 > side1 and side3 > side2
是真的
side3 >= side1+side2
是假的如预期的那样;三角形输入有效。然后是:
side1 != side2 and side1 != side3
是真的
side1**2 + side2**2 > side3**2
为false,因为9 + 25 > 49
为false。
if
测试下面的任何东西都是忽略。side1 == side2 or side1 == side3
是假的side2 == side1 or side2 == side3
是假的side1 == side2 and side1 == side3
是假的因此没有任何印刷品。
因此,我认为你的缩进错了;你在这里排除测试:
if (side1 != side2 and side1 != side3): ##scalene triangle check
if (side1**2 + side2**2 > side3**2):
print ("It is a Acute Scalene triangle.")
if (side1**2 + side2**2 == side3**2):
print ("It is a Right Scalene triangle.")
if (side1**2 + side2**2 < side3**2):
print ("It is a Obtuse Scalene trianle.")
将它们缩进到side1**2 + side2**2 > side3**2
测试之下。 Unindent 那些:
if side1 != side2 and side1 != side3: # scalene triangle check
if side1**2 + side2**2 > side3**2:
print("It is a Acute Scalene triangle.")
if side1**2 + side2**2 == side3**2:
print("It is a Right Scalene triangle.")
if side1**2 + side2**2 < side3**2:
print("It is a Obtuse Scalene triangle.")
我删除了测试周围的剩余括号,并为你修正了一个错字。现在,最后一次测试将实际运行并打印It is a Obtuse Scalene triangle.
这同样适用于其他两个等腰三角形测试:
if side1 == side2 or side1 == side3: # isosceles triangle check 1
if side1**2 + side2**2 > side3**2:
print("It is a Acute Isosceles triangle.")
if side1**2 + side2**2 == side3**2:
print("It is a Right Isosceles triangle.")
if side1**2 + side2**2 < side3**2:
print("It is a Obtuse Isosceles triangle.")
if side2 == side1 or side2 == side3: # isosceles triangle check 2
if side1**2 + side2**2 > side3**2:
print("It is a Acute Isosceles triangle.")
if side1**2 + side2**2 == side3**2:
print("It is a Right Isosceles triangle.")
if side1**2 + side2**2 < side3**2:
print ("It is a Obtuse Isosceles triangle.")
然而,您可能希望看到减少重复次数;将等边的测试放在第一个,然后确定else
分支中的三角形类型:
if side1 == side2 == side3: # equilateral triangle check
print("It is a Equilateral triangle.")
else:
if side1 != side2 != side3: # scalene triangle
type_ = 'Scalene'
else: # isosceles
type_ = 'Isosceles'
if side1**2 + side2**2 > side3**2:
print("It is a Acute {} triangle.".format(type_))
elif side1**2 + side2**2 < side3**2:
print("It is a Obtuse {} triangle.".format(type_))
else:
print("It is a Right {} triangle.".format(type_))
这涵盖了一个地方的所有等边,斜角和等腰三角形测试,避免重复每个测试和消息。
答案 1 :(得分:2)
您的缩进不正确,例如for 3, 4, 5
您的斜角检查未通过第一次测试,而其他所有测试都未评估,因为它们是缩进的:
if (side1 != side2 and side1 != side3): ##scalene triangle check
if (side1**2 + side2**2 > side3**2):
print ("It is a Acute Scalene triangle.")
if (side1**2 + side2**2 == side3**2):
print ("It is a Right Scalene triangle.")
if (side1**2 + side2**2 < side3**2):
print ("It is a Obtuse Scalene trianle.")
您与其他测试有类似的问题。
答案 2 :(得分:0)
您的问题是嵌套的if语句。现在只有当它已经很严重时才检查右侧和钝角度。这似乎解决了这个问题:
if (side1 != side2 and side1 != side3): ##scalene triangle check
if (side1**2 + side2**2 > side3**2):
print ("It is a Acute Scalene triangle.")
elif (side1**2 + side2**2 == side3**2):
print ("It is a Right Scalene triangle.")
elif (side1**2 + side2**2 < side3**2):
print ("It is a Obtuse Scalene trianle.")
请注意,如果您只想触发一个if语句,那么使用elif通常会更好。