我正在努力解决一个问题,该问题计算了在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,它比它应该稍微多一点。
任何人都可以给我一些关于我做错的提示或想法。谢谢
答案 0 :(得分:1)
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次。