Python 3.4中没有print语句

时间:2015-04-11 19:39:19

标签: python python-3.4

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则没有任何打印声明。但公式都是正确的。

3 个答案:

答案 0 :(得分:2)

如果不考虑公式的正确性,您可以根据输入轻松测试每个if语句。

对于side1 = 3side2 = 5sid3 = 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通常会更好。