Может кто-нибудь объяснить мне, почему этот фрагмент кода не работает? - PullRequest
0 голосов
/ 14 июля 2020
annual_salary = int(input("Your annual salary "))
semi_annual_raise = 0.07
r = 0.04
down_payment = 250000
epsilon = 100
low = 0
high = 10000
guess = (high + low)//2
best_saving_rate = (guess/10000)
months = 0
current_savings = 0
steps = 0

while abs(current_savings - down_payment) >= 100:
    for i in range(36):
        current_savings += best_saving_rate*(annual_salary/12) + (current_savings*r)/12
        months +=1
        if months%6 == 0:
            annual_salary = annual_salary + semi_annual_raise*annual_salary  
    if current_savings < down_payment:
        low = guess
    else:
        high = guess
    steps += 1
    guess = (high + low)//2
    best_saving_rate = float(guess/10000)
print(steps)
print(best_saving_rate)
print(current_savings)

Этот код должен найти лучшую норму сбережений для того, кто пытается накопить достаточно денег для выплаты 250000 долларов за 36 месяцев. Я использую поиск пополам и думаю, что нахожусь на правильном пути, но это не сработает. Я думаю, проблема в том, что переменная текущая экономия не переинициализируется при каждой итерации, и я не знаю, как это сделать. ПОЖАЛУЙСТА, ПОМОГИТЕ.

1 Ответ

0 голосов
/ 14 июля 2020

Почему вы ожидаете, что current_savings будет сбрасываться до 0 с каждой итерацией? Вы не делаете этого в коде, так что же может вызвать это? Также, судя по виду кода, вы также должны сбросить months на 0 (хотя кажется, что индексная переменная for l oop i фактически должна быть месяцем).

Это исправляет очевидные ошибки, которые я мог видеть:

while abs(current_savings - down_payment) >= 100:
    current_savings = 0   # add this
    for month in range(36):  # Change this
        current_savings += best_saving_rate * (annual_salary / 12) + (current_savings * r) / 12
        # months += 1  <-- remove this
        if months % 6 == 0:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...