簡體   English   中英

使用python函數計算復利的年數

[英]Working out number of years in compound interest using python function

學校問題:

構建一個函數retirement_age(PMT, i, FV, start_age) ,該函數計算客戶可以退休的(整個) age ,如果他們:

  • 在每年的末尾投資一筆金額( PMT (第一筆付款正好從現在開始支付),
  • 每年i%利率,每年復利。
  • 他們需要一定數量的AT FAST 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()來解決所有問題。

首先,我將注意到,像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來跟蹤運行余額,因為它與每年添加的余額分開。 您跟蹤年齡的邏輯也有些復雜,因此我將其簡化了一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM