Сложные проценты с депозитами в Python

Я работаю над заданием для класса comp sci. Я чувствую, что я действительно близок, но я не могу найти ответ. По сути, задание представляет собой калькулятор сложных процентов, и то, что я пытаюсь сделать, усложняет его, добавляя депозиты к первоначальным инвестициям и позволяя кому-то перестать платить в него в один момент, но собирать его в другой момент. Например, «пользователь может уже накопить
10 000 долларов США на своем аккаунте, когда начнет расчет пенсии. Он намеревается откладывать
еще 1000 долларов США в год в течение следующих 10 лет, после чего он перестанет вносить какие-либо дополнительные
вносят средства на свой счет. Однако до выхода на пенсию может пройти 20 лет. Ваша программа должна уметь учитывать эти различные входные данные и рассчитывать правильную будущую стоимость
их счета при выходе на пенсию"

Вот мой код:

def main():
    print("Welcome to Letmeretire.com's financial retirement calculator!")

    import random
    num = random.randrange(10000)

    principal = int(input("How much are you starting with for your retirement savings?"))
    deposit = int(input("How much money do you plan to deposit each year?"))
    interest = int(input("How much interest will your account accrue annually"))
    time = int(input("Please enter the number of years that you plan to deposit money for."))
    time_till_retirement = int(input("How long until you plan on retiring? (Please enter this amount in years)"))
    t = time + 1
    APR = interest/100
    R = ((1+APR/12)**12)-1
    DR = deposit/R
    DRT = deposit/(R*(1+R)**time)
    PV = principal+(DR-DRT)
    future_value = PV*((1+APR/12)**12*time)
    if time < time_till_retirement:
        time1 = (time_till_retirement-time)
        future = future_value*((1+APR/12)**12*time1)
    else:
        future = future_value
    for i in range(1, t):
        print("After " + str(i) + " years you will have "+ str(future) + " saved!")

main()

Я хотел бы, чтобы вывод выглядел так:

Enter   annual  deposit:    1000    
Enter   interest    rate:   12  
Enter   number  of  years   until   retirement: 10  
What's  the current balance of  your    account:    5000    
How many    years   will    you make    your    annual  deposit?    5   

After   1   year,   you have:   $   6720.0  
After   2   years,  you have:   $   8646.4  
After   3   years,  you have:   $   10803.97    
After   4   years,  you have:   $   13220.44    
After   5   years,  you have:   $   15926.9 
After   6   years,  you have:   $   17838.13    
After   7   years,  you have:   $   19978.7 
After   8   years,  you have:   $   22376.14    
After   9   years,  you have:   $   25061.28    
After   10  years,  you have:   $   28068.64    


But what Im getting is this:

Welcome to Letmeretire.com's financial retirement calculator!

How much are you starting with for your retirement savings?5000

How much money do you plan to deposit each year?1000

How much interest will your account accrue annually12

Please enter the number of years that you plan to deposit money for.5

How long until you plan on retiring? (Please enter this amount in years)10


After 1 years you will have 271235.9643776919 saved!

After 2 years you will have 271235.9643776919 saved!

After 3 years you will have 271235.9643776919 saved!

After 4 years you will have 271235.9643776919 saved!

After 5 years you will have 271235.9643776919 saved!

person user3268414    schedule 04.02.2014    source источник


Ответы (3)


Я думаю, вам нужно убедиться, что формула верна:

FV(t) = 5000 * (1.12 ** t) + 1000 * (1.12 ** t) + 1000 * (1.12 ** (t-1)) + ... + 1000 * 1.12 = 5000 * (1.12 ** t) + 1000 * (1.12 ** t - 1) * 1.12 / 0.12

Затем мы можем определить функцию:

def fv(t, initial, annual, interest_rate):
    return initial * (1+interest_rate) ** t + \
           annual * (1+interest_rate) * ((1+interest_rate) ** t - 1) / interest_rate

Тест:

print fv(1, 5000, 1000, 0.12)
print fv(3, 5000, 1000, 0.12)
print fv(5, 5000, 1000, 0.12)

Урожайность:

6720.0
10803.968
15926.8974592

Пока основная работа сделана, с остальным, думаю, вы справитесь.

person Ray    schedule 04.02.2014

В большинстве случаев я бы предпочел аналитическое решение Рэя — подставить значения в формулу, получить окончательный ответ, а не повторять год за годом.

Однако в этом случае вам нужны значения для каждого года, так что вы можете все-таки выполнить итерацию:

import sys

# Python 2/3 compatibility shim
if sys.hexversion < 0x3000000:
    rng = xrange
    inp = raw_input
else:
    rng = range
    inp = input

def getter_fn(datatype):
    if datatype == str:
        return inp
    else:
        def fn(prompt=''):
            while True:
                try:
                    return datatype(inp(prompt))
                except ValueError:
                    pass
        return fn

get_float = getter_fn(float)
get_int   = getter_fn(int)

def main():
    print("Welcome to Letmeretire.com's financial retirement calculator!")

    principal  = get_float("Initial investment amount? ")
    periods    = get_int  ("How many years will you make an annual deposit? ")
    deposit    = get_float("Annual deposit amount? ")
    apr        = get_float("Annual interest rate (in percent)? ") / 100
    retirement = get_int  ("Years until retirement? ")

    deposits    = [deposit] * periods
    no_deposits = [0.] * (retirement - periods)

    amount = principal
    for yr, d in enumerate(deposits + no_deposits, 1):
        amount = (amount + d) * (1. + apr)
        print('After {:>2d} year{} you have:   $ {:>10.2f}'.format(yr, 's,' if yr > 1 else ', ', amount))

if __name__ == '__main__':
    main()

что приводит к

Welcome to the Letmeretire.com financial retirement calculator!
Initial investment amount? 5000
How many years will you make an annual deposit? 5
Annual deposit amount? 1000
Annual interest rate (in percent)? 12
Years until retirement? 10
After  1 year,  you have:   $    6720.00
After  2 years, you have:   $    8646.40
After  3 years, you have:   $   10803.97
After  4 years, you have:   $   13220.44
After  5 years, you have:   $   15926.90
After  6 years, you have:   $   17838.13
After  7 years, you have:   $   19978.70
After  8 years, you have:   $   22376.14
After  9 years, you have:   $   25061.28
After 10 years, you have:   $   28068.64
person Hugh Bothwell    schedule 04.02.2014

FV(t) = 5000 * (1.12 ** t) + 1000 * (1.12 ** t) + 1000 * (1.12 ** (t-1)) + ... + 1000 * 1.12 = 5000 * (1.12 ** t) + 1000 * (1.12 ** t - 1) * 1.12 / 0.12

У меня есть аналогичная проблема, подобная упомянутой выше, но я не понимаю, почему вторая часть уравнения (формулы) после второго знака равенства? Также нет ли другого способа сделать это более кратким, без необходимости кодировать эту часть «FV(t) = 5000 * (1.12 ** t) + 1000 * (1.12 ** t) + 1000 * (1.12 ** (t-1))» несколько раз?

person Naz    schedule 02.06.2016