【问题标题】:Expected output for MIT OCW problem set 1 is off by 1 for one of the test cases对于其中一个测试用例,MIT OCW 问题集 1 的预期输出偏离 1
【发布时间】:2021-06-08 02:48:44
【问题描述】:

我目前正在做下面列出的 MIT OCW 问题集 1,我几乎已经解决了这个问题,只是我在其中一个测试用例的输出上遇到了一些问题。

你已经从麻省理工学院毕业,现在有一份很棒的工作!你搬到旧金山湾区 决定要开始存钱买房。由于湾区房价非常高, 你意识到你必须存好几年才能负担得起 支付房子。在 A 部分,我们将确定您需要多长时间才能存够 考虑到以下假设,支付首付的钱:

  1. 调用您梦想家园的总成本。
  2. 调用预付款part_down_payment 所需的费用部分。为了 简单来说,假设 part_down_payment = 0.25 (25%)。
  3. 调用您迄今为止节省的金额 current_savings。你从一个电流开始 节省 0 美元。
  4. 假设您明智地投资当前的储蓄,年回报为 r(换句话说, 在每个月底,您会收到一笔额外的 current_savings*r/12 资金用于投入 您的储蓄 - 12 是因为 r 是年利率)。假设您的投资赚取 r = 0.04 (4%) 的回报。
  5. 假设您的年薪是年薪。
  6. 假设您将每月将一定数额的工资用于储蓄 首付。调用那个part_saved。此变量应为十进制形式(即 0.1 10%)。
  7. 在每个月末,您的储蓄将随着您的投资回报而增加, 加上你月薪的百分比(年薪/12)。 编写一个程序来计算你需要多少个月才能存够一笔钱 支付。您希望您的主要变量是浮点数,因此您应该将用户输入转换为浮点数。
    1 您的程序应要求用户输入以下变量:
  8. 起薪年薪(annual_salary)
  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}")

输入的一个测试用例是:120,000 用于年薪,0.1 用于 part_saved,1000000 用于 total_cost。预期的输出是

Number of months: 183

但我的代码的实际输出是

Number of months: 182

【问题讨论】:

    标签: python


    【解决方案1】:

    while 循环中的顺序是错误的原因。尤其要在增加当月的money_saved之前计算利息:

    改变这个:

    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
    

    【讨论】:

    • 谢谢,我从您的解释中得到了预期的输出,但我在理解该过程的工作原理时遇到了一些麻烦。这是否意味着在每月供款之前计算利息?
    • 是的,因为利息不是立即获得的,而是随着时间的推移而获得的。例如,在循环开始时,money_saved 为 0,并且您添加了 part_saved...,直到下个月您才会收到利息。
    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多