这是针对一项作业的完整披露,但我的输出与给定测试用例的作业之间存在一些差异。
该功能将您的年薪,每月您将节省的薪水的一部分作为百分比以及房屋成本。
假设我需要房屋总成本的25%。薪水的一部分用于每月的积蓄,我也每月积蓄4%的利息。
def house_hunting(annual_salary, portion_saved, total_cost):
portion_down_payment = 0.25 * total_cost
current_savings = 0
r = 0.04
months = 0
while current_savings < portion_down_payment:
current_savings += (annual_salary * portion_saved) / 12
current_savings += current_savings * r / 12
months += 1
return months
print( house_hunting(120000,0.1,1000000) )
print( house_hunting(80000,0.15,500000) )
第一个电话给了我182个月,而测试用例说是183个月。 第二个电话给了我105个月,根据测试案例,这是正确的。
所以我的数学在某处是错误的;谁能看到我要去哪里错了?
答案 0 :(得分:3)
问题是您给每个新存款一个月的利息。相反,您必须等到下个月。因此,对于每个月,您应该计算整个月持有的余额的利息,然后然后进行新的存款。很简单,切换这两行:
while current_savings < portion_down_payment:
current_savings += current_savings * r / 12
current_savings += (annual_salary * portion_saved) / 12
months += 1
现在您将获得正确的结果。
答案 1 :(得分:2)
只需像这样修改顺序:
while current_savings < portion_down_payment:
current_savings += current_savings * r / 12
current_savings += (annual_salary * portion_saved) / 12
您对储蓄(上个月的当前储蓄)产生了兴趣,然后增加了新收入。