我已经坚持了几个小时这个问题了,我一遍又一遍地重做它!在这一点上,我想我实际上看到数字飞来飞去。
无论如何,我应该编写一个程序,找出每月支付一年的正确金额,以偿还信用卡上的债务。因此,通过此计划,必须满足一些条件。
此处是我的代码,而我所能得到的只是无限循环。我在这里做错了什么?
balance = 320000
annualInterestRate = 0.2
monthly_interest = float(annualInterestRate) / 12.0
lower_bound = float(balance / 12)
upper_bound = (balance * (1 + monthly_interest)**12) / 12.0
epsilon = 0.01
ans = float(lower_bound + upper_bound) / 2
while abs((balance * (1 + monthly_interest)**12) / 12.0) >= epsilon:
ans = float(lower_bound + upper_bound) / 2
total = float(ans * 12)
new_balance = 0
interest = 0
for month in range(0, 12):
interest += ans + (1 + monthly_interest)
new_balance += ans + interest
if new_balance > balance:
upper_bound = ans
print "low" + str(new_balance)
elif new_balance < balance:
lower_bound = ans
print "high" + str(new_balance)
else:
print "What's going on here?"
print "Lowest payment: %r" % ans
答案 0 :(得分:1)
我相信这里有一些错误,所以首先,你的while是无限循环,因为你使用的条件永远不会收敛到一个解决方案(变量值永远不会在循环内改变)。最重要的是,这种问题似乎是错误的。(
)这是我认为你想要做的,你试图找到“每月付款”的上限和下限,并且收敛条件是这些界限之间的差异应该小于一个常数epsilon (换句话说,错误应该小于epsilon)。
在你的循环中你正确地计算中点,这个中点已经考虑了兴趣,但又在计算它。改变上限和下限的条件没有考虑到兴趣所以这部分代码有点乱。因此,修改这些条件,您的程序实际上会收敛到解决方案:
balance = 320000
annualInterestRate = 0.2
monthly_interest = float(annualInterestRate) / 12.0
lower_bound = float(balance / 12)
upper_bound = (balance * (2 + monthly_interest)**12) / 12.0
epsilon = 0.001
ans = float(lower_bound + upper_bound) / 2
total_debt=balance * (1 + annualInterestRate)
print total_debt
while (upper_bound - lower_bound) >= epsilon:
ans = float(lower_bound + upper_bound) / 2
total = float(ans * 12)
if total > total_debt:
upper_bound = ans
print "low " + str(total)
elif total < total_debt:
lower_bound = ans
print "high " + str(total)
else:
print "Solution found"
break
print "Lowest payment: %r" % ans
希望它有所帮助!