Мне нужно найти лучшую норму сбережений для достижения первоначального взноса на дом стоимостью 1 млн. Долларов за 36 месяцев.
Вот значения, которые предопределены: 1. Ваш полугодовой рост составляет 0,07 (7%) 2. Годовой доход ваших инвестиций составляет 0,04 (4%). 3. Первоначальный взнос составляет 0,25 (25%) от стоимости дома. 4. Стоимость дома, на который вы экономите, составляет 1 миллион долларов США.
Это также непосредственно из поставленной задачи: поскольку мы ищем значение, которое в принципе является плавающим, мы ограничимся точностью до двух десятичных знаков (т. Е. Мы можем сэкономить на 7,04%или 0,0704 в десятичном виде - но мы не будем беспокоиться о разнице между 7,041% и 7,039%). Это означает, что мы можем искать целое число от 0 до 10000 (используя целочисленное деление), а затем преобразовывать его в десятичный процент (используя деление с плавающей запятой), чтобы использовать его при вычислении current_savings через 36 месяцев. Используя этот диапазон, мы ищем только конечное число чисел, в отличие от бесконечного числа десятичных знаков от 0 до 1. Этот диапазон поможет предотвратить бесконечные циклы. Причина, по которой мы используем от 0 до 10000, состоит в том, чтобы учесть два дополнительных десятичных знака в диапазоне от 0% до 100%. Ваш код должен распечатать десятичное число (например, 0,0704 для 7,04%).
#best savings rate in 3 years
annual_salary = float(input("Enter your annual salary: "))
total_cost = 1000000
semi_annual_raise = 0.07
portion_down_payment = 0.25*total_cost
r = 0.04
low = 0
high = 10000
portion_saved = int((high+low)/2)
steps = 0
current_savings = 0
months = 0
salary_increase_months = 0
while(months <= 36):
portion_saved = portion_saved/1000
#checks every 6th iteration to add the semi annual raise
if(salary_increase_months == 6):
annual_salary += annual_salary*semi_annual_raise
salary_increase_months = 0
current_savings += current_savings*(r/12) + portion_saved*(annual_salary/12)
salary_increase_months += 1
months += 1
#bisection code
if(months == 36):
if current_savings < portion_down_payment:
low = portion_saved
months = 0
elif current_savings > portion_down_payment:
high = portion_saved
print('Best savings rate:', portion_saved)
print('Steps in bisection search:', steps)
break
else:
print('It is not possible to pay the down payment in three years.')
break
portion_saved = (low + high)/2
steps += 1
Нам даны следующие тестовые примеры:
Контрольный пример 1
Enter the starting salary: 150000
Best savings rate: 0.4411
Steps in bisection search: 12
Тестовый пример 2
Enter the starting salary: 300000
Best savings rate: 0.2206
Steps in bisection search: 9
Тестовый пример 3
Enter the starting salary: 10000
It is not possible to pay the down payment in three years.
Для первого ввода вот что я получаю
Enter your annual salary: 150000
Best savings rate: 5.000000000000001e-105
Steps in bisection search: 2
Я только что получилбыло много проблем с пониманием того, что я делаю неправильно, и я хотел, чтобы кто-то помог мне и указал, что я делаю неправильно. Я хочу знать решение, но с некоторыми объяснениями тоже. Очевидно, я могу искать решения других людей, но я хочу понять, что я делаю неправильно, потому что я пытаюсь учиться.