学校问题:
构建一个retirement_age(PMT, i, FV, start_age)
函数,用于计算(整个)客户可以退休的age
,如果他们:
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()
来解决我的所有问题。
答案 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
来跟踪运营余额,因为它与每年添加的余额是分开的。您跟踪年龄的逻辑也有些复杂,因此我将其简化了一些。