python-3.x - 为什么我会从这个简单的 python 函数中得到意想不到的结果?
问题描述
我正在通过 MIT OpenCourseWare 工作,我遇到了一个应该是一个非常简单的功能的问题。下面的代码似乎有效,但我得到的答案要么是正确的,要么非常接近我应该做的。例如,如果您输入:
annual_salary = 120000
portion_saved = .10
total_cost = 1000000
它输出 182,但预期的结果是 183。但是,如果我输入:
annual_salary = 80000
portion_saved = .15
total_cost = 500000
我得到 105,这是预期的结果。如果我删除if
分支并使用相同的输入,我会得到 183(正确)和 106(错误)。我完全感到困惑。
def calc_savings(annual_salary, portion_saved, total_cost):
portion_down_payment = .25
r = 0.04 # return on investment
monthly_salary = annual_salary / 12
num_months = 1
current_savings = 0
while current_savings < total_cost * portion_down_payment:
pre_interest = current_savings + (monthly_salary * portion_saved)
current_savings = pre_interest + (pre_interest * r / 12)
if current_savings >= total_cost * portion_down_payment:
return num_months
num_months += 1
return num_months
annual_salary = int(input("Enter your annual_salary: "))
portion_saved = float(input("Enter the percent of your salary to save, as a decimal: "))
total_cost = int(input("Enter the cost of your dream home: "))
print("Number of months: ", calc_savings(annual_salary, portion_saved, total_cost))
解决方案
如果您添加投资回报 ( current_savings * r / 12
),然后添加每月投资 ( monthly_salary * portion_saved
),它将返回正确答案。您只需要切换添加它们的顺序。
推荐阅读
- javascript - 为什么 fft-js 没有给出 fs/2 的频率区间
- asp.net-core - 如何在 Entity Framework Core 3.0 中按周分组?
- python - 如何在点击 QPushButton 时采取行动
- c# - SmtpClient 邮件正文的纯文本版本缺少撇号
- ruby - 将函数返回的元组传递给其他函数
- ruby-on-rails - 经常因延迟工作而发生民意调查
- function - Julia 创建一个函数的多个稍作修改的版本
- node.js - 当从 url 调用 router.post 方法时,在 express.js 中找不到错误 404
- python - tkinter 的几何小部件上的无效语法
- variables - Ansible 如何通过 extra_vars 使用 with_dict?