Задать вопрос
mksmvnv
@mksmvnv

Как обернуть в цикл консольную программу на Python?

Вот для примера программа для вычисления площади треугольника по трем его сторонам. Мне бы хотелось обернуть данную программу в цикл, чтобы после завершение вычислений, пользователю предлагалось снова выполнить расчет новых значений. Погуглив нашел только вариант, где мы оборачиваем всю нашу программу в функцию и при согласии пользователя, повторяем выполнение этой функции. Есть ли другие варианты? Просто мне кажется, если кода программы будет в разы больше, то не целесообразно такую программу оборачивать в функцию. Так ли это? Есть ли другие варианты? И касаемо неверного ввода пользователем, я постоянно использую метод 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.')
  • Вопрос задан
  • 195 просмотров
Подписаться 1 Простой 2 комментария
Ответ пользователя chemdev К ответам на вопрос (3)
@chemdev
Для этого существует цикл while True, оборачивать в функцию или не оборачивать не играет роли в данном случае. Проверка значений должна проводиться после ввода и до расчёта, для различных сценариев в зависимости от результатов проверки существует if-else.
Ответ написан
Комментировать