gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:26:14 27 4
gpt4 key购买 nike

我正在努力解决一个问题,即计算 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

我的问题是,我最终的每月付款比我应有的多了一点。在本例中,monthly_ payment 的返回是 320,而不是 310。对于我尝试过的monthly_ payment 的所有用例,它都比应有的略多。

任何人都可以给我一个提示或想法,告诉我我做错了什么。谢谢

最佳答案

强制单行

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)) 这是付款的总值(value)。每笔付款加上所有节省的利息都是值得的(您越早还款,以后欠下的利息就越少)
  • original_balance*(1+annual)确实是在不还款的情况下的总值(value)。

替代方案

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

此方法通过减少原始余额 12 倍来计算债务的合并剩余部分。

关于python - 计算 12 个月内还清余额所需支付的最低金额的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529287/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com