Форум сайта python.su
0
Начинаю изучать Python, написал программку для расчета площади треугольника по формуле Герона.
def geron(a, b, c): p = (a+b+c)/2 print ('Полупериметр =', p ) s = (p*(p-a)*(p-b)*(p-c))**0.5 return s inputs = [3,4,8], [7,8,9], [5,3,2] for n in inputs: S = geron(n[0], n[1], n[2]) print ('Площадь =',S, '\n')
Полупериметр = 7.5
Площадь = (4.705835796207353e-16+7.685213074469699j)
Полупериметр = 12.0
Площадь = 26.832815729997478
Полупериметр = 5.0
Площадь = 0.0
Офлайн
568
Потому что не может быть треугольника со сторонами 3,4,8
Сумма двух любых сторон треугольника всегда больше третьей.
Тут у тебя получается отрицательное значение p - 8.
Офлайн
0
Спасибо! Пора поспать 
Офлайн
0
Вот, дописал проверки на длины сторон треугольника и на их количество, чтобы лучше запомнить чего и сколько у него бывает 
Все вроде работает, но наверняка что-то реализовано криво. Что тут можно было сделать проще или правильнее?
Занялся программированием дня 4 назад. Так что это то пока моя самая большая программа 
def geron(a, b, c): p = (a+b+c)/2 print ('Полупериметр =', p ) s = (p*(p-a)*(p-b)*(p-c))**0.5 print ('Площадь =',s, '\n') return s def y_n(qwes): ch = input(qwes) while ch.lower() not in ('y', 'n'): ch = input("выберете y/n\n") return ch.lower() def test(a,b,c): ttt = (a, b, c) sor = sorted(ttt) if sor[2] >= sor[0]+sor[1]: print('Это не треугольник, идиот :)') main() else: geron(a, b, c) def main(): abc = input('Введите длины сторон треугольника через пробел\n').split() for i in range(len(abc)): abc[i] = int(abc[i]) if len(abc) != 3: print('У треугольника 3 стороны ;)') main() a = abc[0] b = abc[1] c = abc[2] test(a, b, c) ans = y_n('Посчитать еще один треугольник?\n') if ans == 'y': main() elif ans == 'n': print('Удачи!') exit(0) main()
Офлайн
568
1. Постарайтесь разделить логику различных функций. Например, зачем функции main определять валидность треугольника? Пусть это делает функция расчета площади треугольника. Зачем функция main вообще знает о существовании какой-то функции test и нафиг она нужна? Представьте, что Вы пишите отдельный модуль для вычисления площадей фигур и в вашей программе, которая использует этот модуль есть сотня фигур. Как тогда будет выглядеть main?
2.
a = abc[0] b = abc[1] c = abc[2] test(a, b, c)
test(*a)
if ans == 'y':
Офлайн
0
Спасибо!
Офлайн