Code: #! usr/bin/env python #! -*- coding: utf-8 -*- x11=3 x21=7 x31=12 x12=5 x22=7 x32=8 y11=1 y21=9 y31=1 y12=3 y22=5 y32=3 try: x11=float(x11) x21=float(x21) x31=float(x31) x12=float(x12) x22=float(x22) x32=float(x32) y11=float(y11) y21=float(y21) y31=float(y31) y12=float(y12) y22=float(y22) y32=float(y32) except ValueError: print "Error!" ## проверка существования треугольников A1_B1=((x21-x11)**2+(y21-y11)**2)**0.5 ## нахождение длины AB в первом треугольнике B1_C1=((x31-x21)**2+(y31-y21)**2)**0.5 ## нахождение длины BC в первом треугольнике A1_C1=((x31-x11)**2+(y31-y11)**2)**0.5 ## нахождение длины AC в первом треугольнике A2_B2=((x22-x12)**2+(y22-y12)**2)**0.5 ## нахождение длины AB вo втором треугольнике B2_C2=((x32-x22)**2+(y32-y22)**2)**0.5 ## нахождение длины BC во втором треугольнике A2_C2=((x32-x12)**2+(y32-y12)**2)**0.5 ## нахождение длины AC во втором треугольнике if A1_B1+B1_C1<=A1_C1 or A1_B1+A1_C1<=B1_C1 or A1_C1+B1_C1<=A1_B1: print "Error" elif A2_B2+B2_C2<=A2_C2 or A2_B2+A2_C2<=B2_C2 or A2_C2+B2_C2<=A2_B2: print "Error" else: a=0 ## построение отрезков от вершины второго к вершинам первого A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5 A2_B1=((x21-x12)**2+(y21-y12)**2)**0.5 A2_C1=((x31-x12)**2+(y31-y12)**2)**0.5 ## вычисление площадей треугольников S_A1_B1_C1=(((A1_B1+B1_C1+A1_C1)/2)*(((A1_B1+B1_C1+A1_C1)/2)-A1_B1)*(((A1_B1+B1_C1+A1_C1)/2)-B1_C1)*(((A1_B1+B1_C1+A1_C1)/2)-A1_C1))**0.5 ## площадь первого треугольника по формуле Герона S_A2_B2_C2=(((A2_B2+B2_C2+A2_C2)/2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_B2)*(((A2_B2+B2_C2+A2_C2)/2)-B2_C2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь второго треугольника по формуле Герона S_A2_A1_C1=(((A2_A1+A1_C1+A2_C1)/2)*(((A2_A1+A1_C1+A2_C1)/2)-A2_A1)*(((A2_A1+A1_C1+A2_C1)/2)-A1_C1)*(((A2_A1+A1_C1+A2_C1)/2)-A2_C1))**0.5 ## площадь треугольника A2_A1_C1 по формуле Герона S_A2_A1_B1=(((A2_A1+A1_B1+A2_B1)/2)*(((A2_A1+A1_B1+A2_B1)/2)-A2_A1)*(((A2_A1+A1_B1+A2_B1)/2)-A1_B1)*(((A2_A1+A1_B1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_A1_B1 по формуле Герона S_A2_C1_B1=(((A2_C1+B1_C1+A2_B1)/2)*(((A2_C1+B1_C1+A2_B1)/2)-A2_C1)*(((A2_C1+B1_C1+A2_B1)/2)-B1_C1)*(((A2_C1+B1_C1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_C1_B1 по формуле Герона ## построение отрезков от вершины первого к вершинам второго A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5 A1_B2=((x11-x22)**2+(y11-y22)**2)**0.5 A1_C2=((x11-x32)**2+(y11-y32)**2)**0.5 ## вычисление площадей треугольников S_A1_A2_B2=(((A2_A1+A1_B2+A2_B2)/2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_A1)*(((A2_A1+A1_B2+A2_B2)/2)-A1_B2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_B2))**0.5 ## площадь треугольника A2_A1_B2 по формуле Герона S_A1_B2_C2=(((A1_B2+A1_C2+B2_C2)/2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_B2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_C2)*(((A1_B2+A1_C2+B2_C2)/2)-B2_C2))**0.5 ## площадь треугольника A1_B2_C2 по формуле Герона S_A1_A2_C2=(((A2_A1+A1_C2+A2_C2)/2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_A1)*(((A2_A1+A1_C2+A2_C2)/2)-A1_C2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь треугольника A1_A2_C2 по формуле Герона ## сравнение площадей треугольников if S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1: print "Second triangle in first" elif S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2: print "First triangle in second" else: print "%f | %f" %(S_A2_B2_C2, S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2) оТработал нормально, вышло 3.000000 | 9.000000 блин, в упор не вижу проблемы у себя, ткни носом плиз, цикл то работает норм, проверял то уже, где проблема ?
Дело в том, что если убрать третью ветку, то прога вообще ничего не выдаёт (то есть, она выполняет первое сравнение - оно у неё почему-то не выполняется, выполняет второе сравнение - оно не выполняется (это правильно, так как там и должны получаться разные числа)), а затем она тупо встаёт и ничего не делает... Последнюю ветку я сделал, для того, чтобы понять почему она встаёт и заодно просмотреть значения переменных во время выполнения проги (это пока просто для тестирования сделано).
По заданным тобой данным выполняется только 3 условие, все она нормально работает, я в ней в упор не вижу того что видишь ты, хз короче
Code: #! usr/bin/env python #! -*- coding: utf-8 -*- x11=3 x21=7 x31=12 x12=5 x22=7 x32=8 y11=1 y21=9 y31=1 y12=3 y22=5 y32=3 try: x11=float(x11) x21=float(x21) x31=float(x31) x12=float(x12) x22=float(x22) x32=float(x32) y11=float(y11) y21=float(y21) y31=float(y31) y12=float(y12) y22=float(y22) y32=float(y32) except ValueError: print "Error!" ## проверка существования треугольников A1_B1=((x21-x11)**2+(y21-y11)**2)**0.5 ## нахождение длины AB в первом треугольнике B1_C1=((x31-x21)**2+(y31-y21)**2)**0.5 ## нахождение длины BC в первом треугольнике A1_C1=((x31-x11)**2+(y31-y11)**2)**0.5 ## нахождение длины AC в первом треугольнике A2_B2=((x22-x12)**2+(y22-y12)**2)**0.5 ## нахождение длины AB вo втором треугольнике B2_C2=((x32-x22)**2+(y32-y22)**2)**0.5 ## нахождение длины BC во втором треугольнике A2_C2=((x32-x12)**2+(y32-y12)**2)**0.5 ## нахождение длины AC во втором треугольнике if A1_B1+B1_C1<=A1_C1 or A1_B1+A1_C1<=B1_C1 or A1_C1+B1_C1<=A1_B1: print "Error" elif A2_B2+B2_C2<=A2_C2 or A2_B2+A2_C2<=B2_C2 or A2_C2+B2_C2<=A2_B2: print "Error" else: a=0 ## построение отрезков от вершины второго к вершинам первого A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5 A2_B1=((x21-x12)**2+(y21-y12)**2)**0.5 A2_C1=((x31-x12)**2+(y31-y12)**2)**0.5 ## вычисление площадей треугольников S_A1_B1_C1=(((A1_B1+B1_C1+A1_C1)/2)*(((A1_B1+B1_C1+A1_C1)/2)-A1_B1)*(((A1_B1+B1_C1+A1_C1)/2)-B1_C1)*(((A1_B1+B1_C1+A1_C1)/2)-A1_C1))**0.5 ## площадь первого треугольника по формуле Герона S_A2_B2_C2=(((A2_B2+B2_C2+A2_C2)/2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_B2)*(((A2_B2+B2_C2+A2_C2)/2)-B2_C2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь второго треугольника по формуле Герона S_A2_A1_C1=(((A2_A1+A1_C1+A2_C1)/2)*(((A2_A1+A1_C1+A2_C1)/2)-A2_A1)*(((A2_A1+A1_C1+A2_C1)/2)-A1_C1)*(((A2_A1+A1_C1+A2_C1)/2)-A2_C1))**0.5 ## площадь треугольника A2_A1_C1 по формуле Герона S_A2_A1_B1=(((A2_A1+A1_B1+A2_B1)/2)*(((A2_A1+A1_B1+A2_B1)/2)-A2_A1)*(((A2_A1+A1_B1+A2_B1)/2)-A1_B1)*(((A2_A1+A1_B1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_A1_B1 по формуле Герона S_A2_C1_B1=(((A2_C1+B1_C1+A2_B1)/2)*(((A2_C1+B1_C1+A2_B1)/2)-A2_C1)*(((A2_C1+B1_C1+A2_B1)/2)-B1_C1)*(((A2_C1+B1_C1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_C1_B1 по формуле Герона ## построение отрезков от вершины первого к вершинам второго A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5 A1_B2=((x11-x22)**2+(y11-y22)**2)**0.5 A1_C2=((x11-x32)**2+(y11-y32)**2)**0.5 ## вычисление площадей треугольников S_A1_A2_B2=(((A2_A1+A1_B2+A2_B2)/2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_A1)*(((A2_A1+A1_B2+A2_B2)/2)-A1_B2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_B2))**0.5 ## площадь треугольника A2_A1_B2 по формуле Герона S_A1_B2_C2=(((A1_B2+A1_C2+B2_C2)/2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_B2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_C2)*(((A1_B2+A1_C2+B2_C2)/2)-B2_C2))**0.5 ## площадь треугольника A1_B2_C2 по формуле Герона S_A1_A2_C2=(((A2_A1+A1_C2+A2_C2)/2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_A1)*(((A2_A1+A1_C2+A2_C2)/2)-A1_C2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь треугольника A1_A2_C2 по формуле Герона ## сравнение площадей треугольников if S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1: print "Second triangle in first" elif S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2: print "First triangle in second" else: print "%f | %f" %(S_A1_B1_C1, S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1) Вот этот код не работает. Когда он сравнивает числа, которые получаются в первой ветке цикла они получаются 36 и 36, а он уходит в ELSE. В этом коде он на печать выдаёт переменные из первой ветки цикла
ЫЫ (вырезано цензурой), (вырезано цензурой), (вырезано цензурой), понял, в чем срань - ты походу сравниваешь разные типы данных, попробуй первый if написать так : if str(S_A1_B1_C1)==str(S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1)rint "Second triangle in first" - то есть, перевести его в строку, походу у тебя сравниваются int и float - что для интерпритатора походу разные вещи Хотя это какие-то бакапоры самого if - он сцуко не хочет нормально сравнивать никакие значения, кроме тех случаев когда они не str() - пробовал и if int(S_A1_B1_C1)==int(S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1)rint "Second triangle in first" и if float(S_A1_B1_C1)==float(S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1)rint "Second triangle in first" корректно работает только если if str(S_A1_B1_C1)==str(S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1)rint "Second triangle in first"
Сегодня мне объяснили в чём проблема: оказывается там не ровно 36 получается, а с хвостиком, поэтому надо было вводить погрешность =) Спасибо тем, кто мне помогал!