Вычисление количества лет в сложных процентах с использованием функции Python - PullRequest
0 голосов
/ 25 сентября 2018

Вопрос в школе:

Создайте функцию retirement_age(PMT, i, FV, start_age), которая вычисляет (целое) age, по которому ваш клиент может выйти на пенсию, если он:

  • Вкладывает сумму,PMT в конце каждого ГОДА (с первым платежом, сделанным ровно через год), * ​​1009 *
  • с процентной ставкой 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 голосов
/ 25 сентября 2018

Во-первых, я отмечу, что такие широкие вопросы отладки не очень подходят для 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, чтобы отслеживать текущий баланс с тех порэто отдельно от того, что добавляется каждый год.Ваша логика для отслеживания возраста также была немного запутанной, поэтому я немного упростила ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...