对于其中一个测试用例,MIT OCW问题集1的预期输出为1



我目前正在做下面列出的MIT OCW问题集1,除了在其中一个测试用例的输出方面遇到一些问题外,我几乎已经完成了这个问题。

你毕业于麻省理工学院,现在有一份很棒的工作!你搬到旧金山湾区决定你想开始存钱买房。由于湾区的房价很高,你意识到你必须储蓄几年才能付得起定金房屋付款。在A部分中,我们将确定您需要多长时间才能存够在以下假设的情况下,支付首付款的资金:

  1. 把你梦想中的房子的成本称为total_cost
  2. 将首付款部分所需的部分称为down_payment。对于简单地说,假设portion_down_payment=0.25(25%(
  3. 将您迄今为止节省的金额称为current_savings。你从电流开始节省0美元
  4. 假设你明智地投资当前的储蓄,年回报率为r(换句话说,每个月底,你会收到一笔额外的活期储蓄r/12资金你的储蓄——12是因为r是年利率(。假设您的投资获得回归系数r=0.04(4%(
  5. 假设你的年薪是年薪
  6. 假设你每个月都要把一定数额的工资用于储蓄首付款。称之为portion_saved。该变量应为十进制形式(即0.110%(
  7. 每个月底,你的储蓄将随着你的投资回报而增加,再加上你月薪的一个百分比(年薪/12(。写一个程序来计算你需要多少个月才能存下足够的钱来买房子付款您希望您的主变量是浮点的,所以您应该将用户输入强制转换为浮点
    1您的程序应该要求用户输入以下变量:
  8. 起始年薪(年工资(
  9. 要保存的工资部分(portion_saved(
  10. 你梦想中的房子的成本(total_cost(

以下是到目前为止我的代码

portion_down_payment = 0.25
r = 0.04
annual_salary = float(input("Enter your annual salary: "))
portion_saved = float(input("Enter the percent of your salary to save, as a decimal: "))
total_cost = float(input("Enter the cost of your dream home: "))
months = 0
money_saved = 0
while money_saved < (total_cost*portion_down_payment):
months += 1
money_saved += annual_salary*portion_saved/12
interest = (money_saved*r)/12
money_saved += interest

print(f"Number of months: {months}")

其中一个输入测试用例是:120000表示annual_salary 0.1表示portion_saved,1000000表示total_cost。预期输出为

Number of months: 183

但我的代码的实际输出是

Number of months: 182

while循环中的顺序是导致错误的原因。特别是,利息应该在增加当月节省的钱之前计算出来_

更改此项:

months += 1
money_saved += annual_salary*portion_saved/12
interest = (money_saved*r)/12
money_saved += interest

对此:

months += 1
interest = (money_saved*r)/12
money_saved += annual_salary*portion_saved/12
money_saved += interest

最新更新