2015-04-11 4 views
-1
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, никакой инструкции печати нет. Но формулы все правильны.Нет инструкции для печати в Python 3.4

+1

Вы прошли через все ваши заявления 'if'? Для этих двух комбинаций вы действительно никогда не достигаете оператора 'print()' (кроме пустых 'print()' s). У вас все еще есть проблемы! –

+0

Не просмотрев код в деталях, я подозреваю, что читаю [Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) будет ценным здесь. ** TL; DR ** - не использовать == для сравнения чисел с плавающей запятой. –

ответ

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 является ложным, потому что 9 + 25 > 49 ложно.

      • Эта ветка затем завершается; любая вещь, вложенная ниже теста 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_)) 

Это охватывает все равносторонние, разносторонние и равнобедренные тесты треугольника в одном месте, избегая повторения тестов и сообщения для каждого.

2

Ваши отпечатки неверны, например. для 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.") 

У вас есть подобные проблемы с другими тестами.

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.") 

Обратите внимание, что это вообще лучшая практика для использования Элиф, если вы хотите только одно, если заявление, чтобы вызвать.