请帮我解决这个问题。我不知道我要去哪里。 作业是: “写一个函数投资(PMT,n,i),该函数可以在将来某个时候计算客户的储蓄,
在每年的年底开始投资一定数量的资金 截止到今年年底的PMT,
,年利率为i%,每年复利,
投资金额每两年(累计)增加一倍。”
还有我的代码:
def investment(PMT, n, i):
x = 0
while x < n:
if x % 2 == 1:
PMT = 2*(PMT*(1 + i)**n)
else:
PMT = PMT*(1 + i)**n
x = x + 1
investment_balance = PMT
return round(investment_balance, 2)
答案应该是:investment(15000, 30, 0.1045) == 1954935238.47
,但我得到的是:3.4728768295747016e + 47。
答案 0 :(得分:0)
一些观察:
由于付款是在年末进行,且利息为每年i%,因此在第一年末应没有利息。
如果投资每两年增加一倍,则可以计算2年内的实际利率,然后每两年(每两年)进行一次复利。在运行中,这是一个正常的复利方程,其中PMT在每次复利时都会加倍。应该使逻辑容易一些。对于奇数n,您必须使用原始速率进行最后一次复利。
您的方程式正在每个循环上覆盖PMT。 PMT不会随着利息的增加而增加,仅每两年增加一倍。如果PMT在第0年为100美元,那么在第2年应该仅为200美元,而不是循环计算三遍。
答案 1 :(得分:0)
您正在使用的公式类似于您用来计算future value的复利货币的公式。这是正确的轨道,但是您不想循环执行该计算。您的结果将太大。
试试看。
最后一步 last 很重要,因为我们只在每年的 end 添加付款。这意味着不应在第0年应用利息。(更准确地说,它将应用于0余额。)
如果执行所有这些操作,则会得到一个类似于以下内容的函数:
def investment(PMT, n, i):
x = 0
investment_balance = 0
while x < n:
if x % 2 == 1:
PMT = 2* PMT
investment_balance *= (1 + i)
investment_balance += PMT
x = x + 1
return round(investment_balance, 2)
这适用于您输入的示例输入。