【问题标题】:While trying to compute minimum monthly payments, my keeps returning values that are a bit too high在尝试计算最低每月付款时,我不断返回的值有点太高
【发布时间】:2019-09-19 02:29:49
【问题描述】:

在尝试计算每月最低还款额时,my 不断返回的值有点过高。我需要使用二进制搜索来完成这个问题,但对我来说,使用金融中使用的公式来计算它更有意义。

这是我写的:

balance = 101 
annualInterestRate = 0.2

MIR = (annualInterestRate/12)+1
minpmt = balance/12
maxpmt =( balance*(MIR)**12)/12
pmt = ((minpmt+maxpmt)/2)

while balance>= float(.01):
    for month in range (0,12):
        balance =-pmt
        balance = balance*MIR
    if balance < 0:
        maxpmt = pmt
    if balance >0:
        minpmt = pmt
    pmt = ((minpmt+maxpmt)/2)

print("Lowest Payment: " + str(round(pmt,2)))

【问题讨论】:

  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确说明问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您指定的问题。
  • 你看到了什么输出,你期望的输出是什么? 为什么当你有一个直接的“封闭式”公式时,你必须使用二分搜索?如果余额最后是零,你怎么断定打印出来的付款有点太高了?
  • 一些基本的故障排除在这里会有所帮助。在您的代码中添加一些打印语句,以便您可以监控变量并遵循流程。请注意您在哪里看到了第一个意外值,您会更好地了解在哪里进行调查。

标签: python python-3.x binary-search


【解决方案1】:

您最大的问题是您在及时还清贷款的第一笔付款时退出:我认为您需要接近,而不是简单地支付足够的钱。

while abs(balance) >= float(.01):

接下来,您忘记在每次迭代时重置您的贷款金额。给定一个合理的第一个近似值,您永远不会对付款进行两次以上的猜测:第二次猜测的余额从第一次猜测的结束余额开始。您必须在每次计算时重置它。

但是,您最严重的错误是在扣除当月付款时打错了:

balance =-pmt     # You set balance to the negative of the payment.  OOPS!

尝试减量:

balance -= pmt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多