2014-02-04 1 views
0

Я работаю над заданием для класса comp sci. Я чувствую, что я действительно близок, но я не могу ответить на этот вопрос. В основном задание представляет собой сложный калькулятор процентов, что я пытаюсь сделать, что усложняет его добавление вкладов к первоначальным инвестициям и позволяет кому-то перестать платить за него в какой-то момент, но собирать его в другом месте. Пример», пользователь может уже иметь
сэкономили $ 10000 на счете, когда они начинают свой расчет пенсионного. Они намерены сохранить
еще $ 1000 в год в течение следующих 10 лет, после чего они прекратят делать какие-либо дополнительные
депозиты на свой счет. Тем не менее, они могут быть 20 лет до выхода на пенсию. Ваша программа должна быть в состоянии объяснить этих различных входов и вычислить правильное значение в будущем их
счет выхода на пенсию»Совокупный интерес с депозитами в Python

Вот мой код до настоящего времени:

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! 

ответ

1

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

FV (т) = 5000 * (1,12 ** т) + 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 

До сих пор основная работа сделана, я думаю, что вы можете справиться с остальными.

0

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

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

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 
0
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 

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