Запрос деления пополам - PullRequest
0 голосов
/ 16 декабря 2018

Я только начал Python, и OCW показался мне довольно популярным выбором для начала.Тем не менее, я застрял в наборе проблем, при котором, учитывая набор параметров, вы должны выяснить сумму зарплаты, которую вы должны сэкономить в данном месяце.он использует поиск по разделам, который я реализовал, но мой код, похоже, не дает правильного ответа.

Заработная плата увеличивается на 7% каждые 6 месяцев, а годовая прибыль в 4% от сбережений зачисляется в конце месяца.Экономия в% должна прекратиться, когда общая экономия будет в пределах $ 100 от требования первоначального взноса.

cost = int(1000000)
down_payment = float(0.25 * cost)
current_savings = 0
r = 0.04
annual_salary = int(150000)
a = annual_salary
months = 0
semi_raise = 0.07
epsilon = 100
high = 1.0
def savings(a, current_savings, portion, down_payment):
    for m in range(1, 37):
        if m%6 == 0 and m>0:
            a = a * (1+semi_raise)
        current_savings = current_savings + (a/12 * portion) + (current_savings * r)
        return (current_savings)
while abs(current_savings-down_payment) >= 100:
    portion = float((high+low)/2)
    annual_salary = a
    current_savings = 0.0
    current_savings = savings(a, current_savings, portion, down_payment)
    if current_savings < down_payment:
        low = portion
    elif current_savings > down_payment:
        high = portion
    else:
        print("not enough savings")
print("Best", "%.4f" %portion)

для этого случая я получаю 0,2239 против 0,4411, как указано в решении.

1 Ответ

0 голосов
/ 16 декабря 2018

Вы проверили правильность рассчитанных вами сбережений?Я бы обновил годовой оклад после того, как рассчитал свои текущие сбережения следующим образом:

def savings(a, current_savings, portion, down_payment):
    for m in range(1, 37):
        current_savings = current_savings + a/12 * portion + current_savings * r
        if m % 6 == 0 and m>0:
            a = a * (1+semi_raise)
    return (current_savings)
...