Интуитивно понятный способ заставить калькулятор определять цель пользователя на основе введенных переменных - PullRequest
0 голосов
/ 05 апреля 2020

Я делаю калькулятор для определения текущей стоимости, будущей стоимости, курса или количества лет для расчета единовременной суммы. В настоящее время у меня есть встроенный калькулятор, но я чувствую, что он не оптимизирован под возможности языка и может быть оптимизирован. Вот что у меня есть:

def future_value(pv, rate, n_years):
    fut_val = pv * (1 + rate) ** n_years
    return "The future value of this lump sum would be: ${0:.2f}".format(fut_val)

def present_value(fv, rate, n_years):
    pres_val = fv / (1 + rate) ** n_years
    return "The present value of this lump sum would be: ${0:.2f}".format(pres_val)

def find_var(fv, pv, var, rate="", n_years=""):
    if var == "rate":
        rate = (fv / pv) ** (1 / n_years)-1
        return round(rate, 3)
    elif var == "n_years":
        n_years = np.log(fv/pv) / np.log(1 + rate)
        return round(n_years, 1)
    else:
        return "The variable input is invalid. It must be either 'rate' or 'n_years'."

Это функции, которые я построил для реализации в калькуляторе, и вот сам калькулятор:

def lump_sum_calc(fv="", pv="", rate="", n_years="", var=""):
    if fv == "" and pv == "":
        return "Invalid input. This calculator needs a future value to return the present value, a 
        present value to return the future value, or both to calculate the missing variable."
    elif rate == "" and n_years == "":
        return "The function requires a rate or a number of years to 
        calculate a solution."    
    elif fv == "":
        return future_value(pv, rate, n_years)
    elif pv == "":
        return present_value(fv, rate, n_years)
    elif fv != "" and pv != "":
        return find_var(fv, pv, var, rate=rate, n_years=n_years)

Вот решение используя калькулятор:

lump_sum_calc(fv=400661.61, pv="", rate=.045, n_years=10, var="")

'The present value of this lump sum would be: $257997.10'

Я подошел к проблеме, используя серию операторов «если», сначала обнаружив проблему с помощью ввода пользователя, а затем обработав функцию, если проблем нет. Существует ли более интуитивно понятный способ определения того, что запрашивает пользователь, на основе заданных переменных без необходимости снабжать калькулятор утверждениями if для каждой возможности?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...