【问题标题】:Working out number of years in compound interest using python function使用python函数计算复利年数
【发布时间】:2018-09-25 06:11:57
【问题描述】:

学校问题:

构建一个函数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(),这可能会解决我所有的问题。

【问题讨论】:

  • 可能不是您的问题,但&lt;= 应该只是&lt;。循环只需要在它们太少时继续,而不是在数量等于 FV 时继续
  • 我明白了,谢谢您的意见
  • 而且这段代码似乎没有考虑到每年的新投资。它只是复合了现有的原则。那不应该是PMT = PMT + (PMT * (i + 1))吗?或类似的东西。您需要每年添加新的 PMT。
  • 是的,我确实尝试过,然后我得到了 25 的答案
  • 好吧,我会做出改变然后从那里开始工作。至少更近了。

标签: python-3.x function math


【解决方案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 来跟踪运行余额,因为它与每年添加的余额是分开的。你记录年龄的逻辑也有点复杂,所以我把它简化了一点。

【讨论】:

  • 我知道你在那里做了什么,为了让我的方程在第一年等于 20000,必须有一个变量设置为 0,这样它就可以抵消方程的其余部分,只保留 @第一年为 987654324@,但随着循环的继续而增长。感谢简化我的age,看起来好多了。让我在 python 上快速尝试一下。我会恢复的,但它应该可以工作。
  • @MengeziDhlomo 我不确定您所说的“取消”是什么意思。 p 是投资金额。第一年为零,并且在第一年年底将 PMT 添加到其中之前,累积零利息。 pPMT 是等式中不同的变量。
  • 不,不。我完全理解。不用担心。我认为这只是我的评论的措辞使它有点混乱。该代码完美运行。显然必须改变一些事情以避免某种剽窃罪。再次感谢。我会将其标记为正确
  • @MengeziDhlomo 修复你的变量名。大写字母只能用于类名。所有名称都应为小写。如果 toy 可以保证输入的年龄是整数,则返回的 int 强制转换也是多余的,这似乎是这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 2017-06-02
  • 2015-12-20
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多