使用python函数计算复利的年数

时间:2018-09-24 21:43:47

标签: python-3.x function math

学校问题:

构建一个retirement_age(PMT, i, FV, start_age)函数,用于计算(整个)客户可以退休的age,如果他们:

  • 在每个YEAR(第一年的第一个月末)投资PMT 从现在起一年后付款),
  • 每年i%的利率,每年复利。
  • 他们需要至少支付FV才能支付得起 退休。
  • 他们刚满start_age岁。

我正在努力解决PMT达到FV所需的年数

这是我的代码:

def retirement_age(PMT, i, FV, start_age):
count = 0

while PMT <= FV: #PMT set to loop till it reaches FV
    PMT = PMT * (1+i)
    count = count + 1 #adds 1 to count value until while loop satisfied
    age = count + start_age #adds count value to start_age to determine retirement age
return int(age) #returns age

print (retirement_age(20000, 0.1, 635339.63, 20))

我的回答如下:

57

答案应该是:

35

我不知道我在做什么错。并且该任务特别提到不允许我们导入诸如math之类的外部函数,这意味着我不能使用math.log()来解决我的所有问题。

1 个答案:

答案 0 :(得分:1)

首先,我将注意到像SO这样的广泛调试问题并不十分合适。

话虽如此,我还是尝试了一下,再次阅读规格后,发现了问题所在。我想我也应该发布它。

  • 您只需要在本金小于期望值时继续进行计算。当它们相等时,您可以停下来。

  • 然而,主要问题是您每年没有增加任何钱。您只是对初始本金积累了兴趣。还有...

  • 您立即投资了PMT。正如说明所强调的那样,投资要到今年年底完成。这意味着在循环开始时,他投入了0。这意味着他直到第二个循环/年开始才开始积累兴趣。


def retirement_age(PMT, i, FV, start_age):
    age = start_age
    p = 0

    while p < FV:
        p = PMT + p * (1+i)
        age += 1

    return int(age)

print(retirement_age(20000, 0.1, 635339.63, 20))
# 35

我介绍了p来跟踪运营余额,因为它与每年添加的余额是分开的。您跟踪年龄的逻辑也有些复杂,因此我将其简化了一些。