Python Can';Don’不要让这个代码起作用:一个平分线搜索,找到支付房屋首期款的最佳储蓄率

Python Can';Don’不要让这个代码起作用:一个平分线搜索,找到支付房屋首期款的最佳储蓄率,python,Python,现在,我正试图解决麻省理工学院6.00I的一个实验问题 你现在要努力找到最好的储蓄率,以便在36个月内为一栋价值100万美元的房子支付首期款。由于实现这一目标是一项挑战,我们只希望您的储蓄在所需首付款的100美元以内 写一个程序来计算最佳储蓄率,作为你起薪的函数。你应该使用​对分搜索()​ 以帮助您高效地完成此任务。您应该记录完成对分搜索所需的步骤数。在这个问题中,您应该能够重用为B部分编写的一些代码 因为我们正在搜索一个原则上是浮点的值,所以我们将自己的精度限制在两位小数(即,我们可能希望以7

现在,我正试图解决麻省理工学院6.00I的一个实验问题

你现在要努力找到最好的储蓄率,以便在36个月内为一栋价值100万美元的房子支付首期款。由于实现这一目标是一项挑战,我们只希望您的储蓄在所需首付款的100美元以内

写一个程序来计算最佳储蓄率,作为你起薪的函数。你应该使用​对分搜索()​ 以帮助您高效地完成此任务。您应该记录完成对分搜索所需的步骤数。在这个问题中,您应该能够重用为B部分编写的一些代码

因为我们正在搜索一个原则上是浮点的值,所以我们将自己的精度限制在两位小数(即,我们可能希望以7.04%或0.0704的小数保存,但我们不会担心7.041%和7.039%之间的差异)。这意味着我们可以搜索一个整数​ 在0和10000之间(使用整数除法),然后将其转换为十进制百分比(使用浮点除法),以便在计算​活期存款​ 36个月后。通过使用这个范围,我们只搜索有限数量的数字,而不是0到1之间的无限小数。此范围将有助于防止无限循环。我们使用0到10000的原因是为了在0%到100%的范围内增加两个小数位。您的代码应打印出一个小数点(例如,0.0704代表7.04%)

这是我的代码:

while True:
  try:
    startingSalary = int(input('Enter the starting salary: '))
    break
  except ValueError:
    pass
  
semiRaise = 0.07
investmentReturn = 0.04
houseCost = 1000000
downPayment = houseCost * 0.25
high = 10000
low = 0
savingsRate = ((low + high) / 2) / 10000
savings = 0
steps = 0
months = 0
monthlySalary = startingSalary / 12

while downPayment - savings > 100 and months <= 36:
  savingsRate = ((low + high) / 2) / 10000
  savings += monthlySalary * savingsRate
  savings += savings * (investmentReturn / 12)
  months += 1
  if months % 6 == 0:
    monthlySalary += monthlySalary * semiRaise
    
  if savings < downPayment:
    low = savingsRate
  elif savings > downPayment:
    high = savingsRate
  steps += 1 
  
print('Best savings rate: ', savingsRate)
print('Steps in bisection search: ', steps)
    
但我的输出完全错误,正确的输出应该是:

Enter the starting salary:​ 150000 

Best savings rate:​ 0.4411
Steps in bisection search:​ 12

有人能认出我做错了什么吗?谢谢大家!

你为什么这么做
rate=(低+高)//2它不应该只有一个
/
?听起来好像需要两个嵌套循环。外层计算不同的储蓄率,而内层则应在36个月内使用该储蓄率。你应该试着把内部循环作为它自己的函数来编写,这样你就可以独立地测试它了。这意味着你可以在一个月内节省5000次月薪。我想知道怎么做;)为什么你的月薪是起薪?起薪是你被告知一年的薪水吗?因为我认为你很可能是根据你工作的时间而不是固定的年薪来获得报酬的。实质上,真正的问题是:起薪和年薪一样吗?
Enter the starting salary:​ 150000 

Best savings rate:​ 0.4411
Steps in bisection search:​ 12