计算12个月内还清余额所需支付的最低金额的算法

2024-04-25 05:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力与一个问题,计算最低每月固定支付所需的,以支付信用卡余额在12个月内。我所说的每月固定付款,是指每月不改变的一个数字,而是一个固定的数额,10的倍数,所有月份都是一样的,每个月都要付。(使用此付款方案,余额可能变为负数,这是可以的)

作为我的投入

original_balance = 3329

annualInterestRate = 0.2

由此,我计算出如下:

after_12_months_interest = original_balance
monthlyInterestRate = round(annualInterestRate/12.0,2)
monthly_payment = 10
total_paid = 0

for i in range(0,12):
    after_12_months_interest = after_12_months_interest + (annualInterestRate/12.0)*after_12_months_interest

while total_paid < after_12_months_interest:
    new_balance = 0
    unpaid_balance = original_balance - monthly_payment 
    total_paid = 0
    for i in range(0, 13):
        total_paid = total_paid + monthly_payment
    if total_paid < after_12_months_interest:
        monthly_payment = monthly_payment + 10

print "Lowest Payment: ", monthly_payment

我的问题是,我的月供比我应该得到的多一点。在这种情况下,每月支付的回报是320而不是310。对于所有的用例,我都试过每月支付一次,比应该支付的稍微多一些。你知道吗

任何人都可以给我一个提示或一个关于我做错了什么的想法。谢谢


Tags: inforrangepayment信用卡余额totalbalance
1条回答
网友
1楼 · 发布于 2024-04-25 05:19:12

强制一行

from itertools import count

print(next(payment for payment in count(0, 10) 
    if sum(payment*(1+monthly)**i for i in range(12)) > original_balance*(1+annual)))

它的作用是:

  • next取迭代器的第一个元素。你知道吗
  • count尝试从0到无穷大的值(仅在每次调用next时,并且仅在返回值之前)
  • sum(payment*(1+monthly)**i for i in range(12))这是付款的总和。每一笔付款都是值得的,加上所有节省下来的利息(你偿还的越早,你以后欠的利息就越少)
  • original_balance*(1+annual)确实是没有偿还的总价值。你知道吗

备选方案

print(next(payment for payment in count(0, 10) 
    if reduce(lambda x,_:(x - payment)*(1+monthly), range(12), original_balance) <= 0))

这一个通过reduce将原始余额乘以12来计算债务的组合剩余部分。你知道吗

相关问题 更多 >