У меня есть цикл for, вложенный в мой цикл while, что вызывает бесконечный цикл в моем коде? - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в Python и вообще программирую.Я пытаюсь использовать цикл while с вложенным циклом for, чтобы вычислить самый низкий процент заработной платы, который может быть сохранен и который достигнет цели экономии в течение 36 месяцев.Код также включает в себя функции применения полугодового повышения заработной платы каждые 6 месяцев и применения полученных процентов к экономии.

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

total_cost = 1000000
semi_annual_raise = 0.07
down_payment = 0.25*total_cost
starting_salary = float(input("What is your annual salary?: "))
monthly_salary = starting_salary/12.0
r = 0.04
steps = 0
epsilon = 100
low = 0
high = 10000
portion_saved = (high + low)/2.0
current_savings = 0
raise_counter = 0

while abs(current_savings - down_payment) > epsilon:
    current_savings = 0

    for months in range(36):
        current_savings += (current_savings*r/12) + (monthly_salary* 
        (portion_saved/10000))

        if raise_counter == 6:
            monthly_salary += monthly_salary*semi_annual_raise
            raise_counter = 0
        raise_counter += 1

    if current_savings < down_payment:
        low = portion_saved
    else:
        high = portion_saved
    portion_saved = (high + low)/2.0
    steps += 1
    raise_counter = 0
print ("Number of steps =", steps)
print ("Optimal % to save:", portion_saved/10000)

1 Ответ

0 голосов
/ 20 ноября 2018

Почему вы использовали (monthly_salary*portion_saved/10000?Поскольку вам нужно добавлять portion_saved к current_savings каждый месяц, я бы порекомендовал вам использовать

current_savings+=(current_savings*r/12) + portion_saved

Я думаю, вы также можете упростить процесс, найдя%Для сохранения используйте следующую формулу

monthly_salary*(save_percent/100)* 36 = down_payment-epsilon

...