2017-05-25 83 views
0

我目前正在学习Python,这是涉及平分搜索的问题集中的最后一个问题。我觉得我很接近解决这个问题,但不确定我做错了哪一部分。在36个月内计算房屋首付的储蓄比例

问题:

Write a program to calculate the savings percentage you need each month to afford 
the down payment in three years (36 months). 
Down payment: $250000 
Semi-annual raise: 0.07 (7% raise every 6 months) 
Investment return: 0.04 (4%) 

代码:

salary = 150000 
semi_annual_raise = 0.07 
investment_return = 0.04 
down_payment = 250000 

low = 0 
high = 10000 
percent_saved = int((low + high)/2) 
current_savings = 0.0 
steps = 0 
months = 0  

print('Annual salary:', salary) 

while current_savings < down_payment: 
    percent_saved = percent_saved/10000 
    monthly_salary = salary/12 
    current_savings += current_savings*investment_return/12 
    current_savings += monthly_salary*percent_saved 

    if current_savings < down_payment: 
     low = percent_saved 
    elif current_savings > down_payment: 
     high = percent_saved 
     print('Best savings rate:', percent_saved) 
     print('Steps in bisection search:', steps) 
     break 
    else: 
     print('It is not possible to pay the down payment in three years.') 
     break 
    percent_saved = (low + high)/2 
    steps += 1 
    months += 1 

我的输出:

Annual salary: 150000 
Best savings rate: 0.5000250012500626 
Steps in bisection search: 39 

测试案例(正确的输出):

Annual salary: 150000 
Best savings rate: 0.4411 
Steps in bisection search: 12 

如果有人能指出我出错的地方,那将不胜感激。我想知道如何解决问题,而不是仅仅接收答案。谢谢。

+0

请显示预期的输出与实际输出的内容。你有没有做过任何调试? – Carcigenicate

+0

你被困在你的while循环中 – thesonyman101

+0

你每6个月增加7%的基础上150K?我可以有你的工作吗? ;-) – ShadowRanger

回答

1

您没有考虑到您的代码中的semi_annual提高。一些代码效果如下

months = 1.0 
c_raise = 0.0 
year3income = 0.0 
while months <=36: 
    if months%6 ==0: 
     c_raise +=1 
     monthly_salary += monthly_salary*semi_annual_raise 
    year3income +=monthly_salary+monthly_salary*yearly_return 
    months+=1