下面我有一段用于计算信用卡余额的代码,但当balance
具有极值(例如下面的balance=9999999999
)时,它不起作用。它通过无限循环抛出代码。我有几个关于如何解决这个缺陷的理论,但不知道如何推进它们。这是我的代码:
balance = 9999999999
annualInterestRate = 0.2
monthlyPayment = 0
monthlyInterestRate = annualInterestRate /12
newbalance = balance
month = 0
while newbalance > 0:
monthlyPayment += .1
newbalance = balance
for month in range(1,13):
newbalance -= monthlyPayment
newbalance += monthlyInterestRate * newbalance
month += 1
print("Lowest Payment:" + str(round(monthlyPayment,2)))
我的理论是这样的
while newbalance > 0
导致无限循环,因为newbalance总是大于0.
如何更改此while
循环,以免导致我的代码无限运行?
顺便说一下: 程序适中,程序运行很长时间,最后给出答案。对于较大的数字,该计划只是继续。
答案 0 :(得分:3)
此循环不是无限的,但需要很长时间才能解决。对于非常大的balance
值,monthlyPayment
必须变得非常大才能将其降至零以上。
答案 1 :(得分:0)
如果允许在你的作业中使用它,那么二分法将会更快地执行。但是,如果您需要将每月付款增加0.01,则无法帮助您。
static_balance = balance
interest = (annualInterestRate/12)
epsilon = 0.01
lo = balance/12
hi = balance
while abs(balance) > epsilon:
balance = static_balance
min_pmt = (hi+lo)/2
for i in range(12):
balance -= min_pmt
balance *= 1+interest
if balance > 0:
lo = min_pmt
else:
hi = min_pmt
print("Lowest payment: ", round(min_pmt, 2))