Приведенный ответ: месяцы = 142, где, если я введу те же переменные, я получу месяцы = 128.? проблема с моей переменной l oop? - PullRequest
1 голос
/ 09 апреля 2020

Этот код предназначен для определения количества месяцев, которое требуется для погашения первоначального взноса (.25) дома.

annual_salary = float(input('Enter your annual salary:')) #120000

portion_saved = float(input('Enter the percent of your salary to save, as a decimal:')) #.05

total_cost = float(input('Enter the cost of your dream home:')) #500000

semi_annual_raise = float(input('Enter the semi­annual raise, as a decimal: ')) #.03

portion_down_payment = .25 * total_cost
current_savings = 0
annual_return_rate = .04

portion_saved_monthly = annual_salary / 12 * portion_saved

current_savings = current_savings + portion_saved_monthly

month = 1
while current_savings < portion_down_payment:
    current_savings += (current_savings * annual_return_rate / 12) + portion_saved_monthly
    month += 1
    if month % 6 == 0:
        annual_salary += annual_salary * semi_annual_raise
        portion_saved_monthly = annual_salary / 12 * portion_saved
        current_savings += (current_savings * annual_return_rate / 12) + portion_saved_monthly

print('Number of months: ', month)

1 Ответ

1 голос
/ 09 апреля 2020

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

Удаление этой строки из блока if дает ожидаемый результат.

while current_savings < portion_down_payment:
    current_savings += (current_savings * annual_return_rate / 12) + portion_saved_monthly
    month += 1
    if month % 6 == 0:
        annual_salary += annual_salary * semi_annual_raise
        portion_saved_monthly = annual_salary / 12 * portion_saved
...