Вот для примера программа для вычисления площади треугольника по трем его сторонам. Мне бы хотелось обернуть данную программу в цикл, чтобы после завершение вычислений, пользователю предлагалось снова выполнить расчет новых значений. Погуглив нашел только вариант, где мы оборачиваем всю нашу программу в функцию и при согласии пользователя, повторяем выполнение этой функции. Есть ли другие варианты? Просто мне кажется, если кода программы будет в разы больше, то не целесообразно такую программу оборачивать в функцию. Так ли это? Есть ли другие варианты? И касаемо неверного ввода пользователем, я постоянно использую метод sys.exit(). Правильно ли это или можно также делать цикл с возвратом к первому вопросу? (пс. Я новичок, не судите строго).
import sys
import time
from math import sqrt
def visual_effects(f):
def wrapper(*args, **kwargs):
print('The result is being calculated, please wait...')
time.sleep(2)
res = f(*args, **kwargs)
print(f'The area of the triangle is: {res} cm.')
return wrapper
@visual_effects
def area_of_triangle(side1, side2, side3):
match side1 and side2 and side3:
case 0:
print('Error! All sides of the triangle must be greater than zero.')
sys.exit()
perimeter = (side1 + side2 + side3) / 2
result = round(sqrt(perimeter * (perimeter - side1) * (perimeter - side2) * (perimeter - side3)), 2)
return result
try:
area_of_triangle(float(input('Enter the length of side of triangle 1 (cm): ')),
float(input('Enter the length of side of triangle 2 (cm): ')),
float(input('Enter the length of side of triangle 3 (cm): ')))
except ValueError:
print('Error! Please enter an integer or fractional number for the program to work correctly.')