Я делаю калькулятор для определения текущей стоимости, будущей стоимости, курса или количества лет для расчета единовременной суммы. В настоящее время у меня есть встроенный калькулятор, но я чувствую, что он не оптимизирован под возможности языка и может быть оптимизирован. Вот что у меня есть:
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 для каждой возможности?